[Test] SpringBoot Test - Service (Mockito)
2733 ワード
Unit Test ?
ユニットテストは、サービス・レベルのビジネス・ロジックのみを検証するため、レポートやコントローラの影響を受けない環境でテストする必要があります.
テストのFAST原則
F-Fast:テストを試してみるには、迷わずに早くしなければなりません.
I-Independent:オブジェクトの状態、メソッド、以前のテストステータス、および他のメソッドの結果に依存できません.
R-Repeatable:どの環境でも同じ結果を繰り返す必要があります.
S-Self-Validating:すべてのテストに合格または失敗の結果が必要です.
T-Timely:実際のコード生成前にテストを行う必要があります.実際のコードを実装した後にテストコードを作成すると、テストできないように実際のコードが設計される場合があります.
Mockito
Javaでユニットテスト用にモジュールを作成するフレームワーク
Mock
実際のオブジェクトの作成と使用にかかるコスト(時間、コストなど)が高いか、オブジェクト間の依存性が強く、実装が困難な場合に偽のオブジェクトを作成および使用します.
使用法:https://github.com/mockito/mockito/wiki/Mockito-features-in-Korean
サービステストの作成
@ExtendWith(MockitoExtension.class)
class SafetyInfoServiceTest {
@InjectMocks
private SafetyInfoServiceImpl safetyInfoService;
@Mock
private SafetyInfoRepository safetyInfoRepository;
@Mock
private UserRepository userRepository;
@Mock
private SafetyInfoQueryRepository safetyInfoQueryRepository;
final String userEmail = "[email protected]";
void setup(){
User user = User.builder().build();
given(userRepository.findByEmail(userEmail)).willReturn(Optional.of(user));
}
@Test
void findAllSafetyInfo() {
// given
setup();
List<FindSafetyInfoResDto> expected = new ArrayList<>();
given(safetyInfoQueryRepository.findAllWithUserId(any())).willReturn(expected);
// when
List<FindSafetyInfoResDto> response = safetyInfoService.findAllSafetyInfo(userEmail);
// then
assertThat(response).isEqualTo(expected);
}
}
@ExtendWith(MockitoExtension.class)
SpringContainerをロードしない(=Springに依存しない)必要なオブジェクトのみを実行する->非常に速い!
@Mock, @InjectMocks
-@Mock:テストで「必須」のダミー
-@InjectMocks:依存性を注入する必要があるMockオブジェクト
@Mockとして宣言されたダミーオブジェクトに依存する@InjectMocksオブジェクトを作成します.
given(a(b)).willReturn(c)
メソッド実行時テストの状況の設定
-a:Mockingメソッド
-b:メソッドのパラメータ
-c:メソッド実行時に返される値の設定
when.thenReturn VS given.willReturn
いつ:Mockitoのインポート
指定:BDMockitoのインポート
違い:BDDメソッドをコードに導入すると、既存のMockitoは可読性を損なうため、この問題を解決する機能は同じですが、名前の異なるクラス!
Reference
この問題について([Test] SpringBoot Test - Service (Mockito)), 我々は、より多くの情報をここで見つけました https://velog.io/@dot2__/Test-SpringBoot-Test-Service-Mockitoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol