私のプロジェクトでは、単体テストの実行に問題があります。 1つの問題は、統合テストを行うだけで書込みがはるかに高速であり、コンポーネントが実際に一緒に機能することもテストすることです。ユニットの斬新な「アルゴリズム」をテストする方がずっと簡単です。単体テストのサービスクラスは間違っていて役に立たないと感じます。春データ:サービスレイヤユニットテスト
私はmockitoを使用してバネデータリポジトリ(したがって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を返すように指示してから、返されます。ワオ。驚いた!私のサービスではなく、私がテストしているような気分です。
編集:いくつかの愚かなエラーだった場合、私は見
唯一の利点は、セットがnullまたは愚かな何か似て値を返すことが不要なラインを残すように起こります。そのような場合は単体テストに捕らえられます。それでも「報酬努力」の比率は悪いようですか?
私の答えに関するその他の質問や質問がある場合は、あなたの思考の列車であなたの権利を教えてください。 –
サービスにデータベースにアクセスする以外の機能を備えているサービスは、テストする必要があります。単純なCRUD操作は、DB統合レイヤーでテストするだけです。あなたの 'findById'サービスメソッドがデータベース' findById'メソッドを呼び出していた場合、同じDB /テーブル/リポジトリにはない情報で結果を強化します - ユーザーレコードの例には、逆IPルックアップ - それはサービスレベルでテストするのが理にかなっています。しかし、*すべてを模倣することは、あなたのテストと模擬フレームワークを単体テストすることです。 –