私のサービスの単体テストを実行するためではなく、私は私の厚い頭蓋骨を介してこれを取得することはできませんいくつかの理由でMockitoと周りいじります。私のテストが合格しているが、私は右のそれをやっていることを私はconvicedておりません。
ここで私は、カウント()メソッドをテストする例です。この方法は、単純に転送し、そのリポジトリと私への呼び出しは、それだけで、他は何も起こらないことを確認するためにwan't。これは私が持っているものです。
@RunWith(MockitoJUnitRunner.class)
public class PersonServiceImplTest {
@Mock
private PersonRepository personRepository;
@InjectMocks
private PersonServiceImpl personService;
@Test
public void testCount() {
when(personRepository.count()).thenReturn(2L);
long count = personService.count();
assertEquals(2L, count);
verify(personRepository).count();
}
}
私のテストは合格ですが、私はいくつかの質問を持っています。
assertEqualsは必要とされていますか?私はそれを理解するように、私は、メソッドスタブ(.thenReturn(値...))の予想結果として置くものは何でも常に返さ値になります。それとも、このシナリオでは、何か他のものだろうか?
私は検証が必要なのですか?私はpersonRepository.count()が実際に呼び出されたことを確認したいので、私が行うような気がします。それとも私は、同様のassertEquals()を持っている冗長ですか?
私は両方のassertEqualsを必要とし、検証していますか?
そして最後に、私はこの権利をしています:)
ありがとうございました
はい、あなたは右のそれをやっています。
あなたは、サービスをテストし、実際のサービスにモックリポジトリを注入しています。それはあなたのサービスのビジネス・ロジックになると、何が起きている可能性があります。それはそれはあなたがやっているだけのように、既知の入力および出力知られているとのコードを確認することが重要である理由です。
あなたは、リポジトリからの応答を与えられた、ビジネス・ロジックの結果をチェックしています。この特定のコードはかなり簡単ですが、ビジネスロジックは、リポジトリから提供された平均値または合計値だけでなく、同じ値を提供していた場合を想像します。
そして3.検証とのassertEqualsは異なるものをテストしています。リポジトリメソッドが呼び出されたことを確認し、サービスを正しい値に応答したことをアサートチェックを確認してください。あなたのサービスメソッドは、ハードコードされていたことを想像してみて
return 2L
。assertEqualsは渡すだろうが、検証は失敗します。はい、あなたは右のそれをやっています。あなたは何をしているテストは、あなたがテストしているのはなぜにリンクされています。特定のアサーションや検証が必要とされるかどうかは、通常ダウン、個々の状況にあります。この場合は、リポジトリメソッドが返すことをテストするにはほとんど意味があり
2L
ますが、あなたのサービスが戻ることをテストするための良い場合があります2L
。同様に、サービスメソッドが呼び出されたことをテストしても意味がありませんが、リポジトリメソッドが呼び出されたことをテストするための良い場合があります。
あなたのサービスをテストするためのツールを持っているあなたは今、次のステップは、書き込みするテストを決定しています。