私のプロジェクトでは、単体テストを行うのに問題があります。1 つの問題は、統合テストを実行するだけで、作成がはるかに高速になり、コンポーネントが実際に連携して動作することもテストされることです。新しい「アルゴリズム」などの単体テストは、はるかに簡単に思えます。単体テストサービスクラスは、間違っていて役に立たないと感じています。
私はmockitoを使用してSpringデータリポジトリをモックしています(したがってDBアクセス)。問題は、モックされたリポジトリにメソッド呼び出し getById でエンティティ A を返すように指示すると、明らかにそれが返され、サービスもそれを返すことです。はい、サービスはいくつかの余分な処理を行いますが、(休止状態からの) 遅延コレクションのロードなど、非常に小さな処理を行います。明らかに、単体テストには遅延コレクション (プロキシ) はありません。
例:
@Test
public void testGetById() {
System.out.println("getById");
TestCompound expResult = new TestCompound(id, "Test Compound", "9999-99-9", null, null, null);
TestCompoundRepository mockedRepository = mock(TestCompoundRepository.class);
when(mockedRepository.findOne(id)).thenReturn(expResult);
ReflectionTestUtils.setField(testCompoundService, "testCompoundRepository",
mockedRepository, TestCompoundRepository.class);
TestCompound result = testCompoundService.getById(id);
assertEquals(expResult, result);
}
万歳、残りは成功します。驚いた!いいえ、そうではありません。
誰かが私が間違っていることを説明できますか? または、そのようなテストのポイントは何ですか?つまり、expResult を返すように指示すると、それが返されます。わお。驚いた!私のサービスではなく、mockitoが機能するかどうかをテストしているように感じます。
編集:
いくつかの愚かなエラーが発生した場合に私が見る唯一の利点は、戻り値を null または同様の愚かなものに設定する不要な行をそこに残すことです。このようなケースは、単体テストによってキャッチされます。それでも「報酬と努力」の比率は悪いように見えますか?