2

簡単な質問です。spring-data を使用して DAO レイヤーの CRUD メソッドを生成する場合、生成されたメソッドに対して単体テストを作成する必要がありますか? それとも、ライブラリ コードの単体テストと同等でしょうか?

前もって感謝します。

編集:明確にするために、リリース前に実行される一連の統合テストに加えて、単体テストを作成する必要があるかどうかを尋ねています。たとえば、DAO レイヤーの findAll() メソッドの単体テストは次のようになります。

class DepartmentDAOTest extends spock.lang.Specification {
   /* ... */
   def "returns all departments"() {
       setup:
       def result = new List<Department>()
       when:
       result = dao.findAll()
       then:
       result.size() == EXPECTED_SIZE
   }
}

一方、統合テストは、おそらく新しいリリースにタグを付ける前に、テスト チームまたは開発者によって手動で実行されるでしょう。これはJWebUnitまたはGebを使用して自動化でき、すべてのコンポーネント (プラットフォームを含む) をテストして、「統合」したときに期待どおりに動作することを確認します。

JdbcTemplate を使用して手動で DAO 実装を作成する場合、すべてのメソッドを単体テストする必要があることに疑いの余地はありません。サービス レイヤー (DAO レイヤーを呼び出す) の単体テストを行うときは、DAO レイヤーをモック アウトできるので、2 回テストする必要はありません。

PDF を生成するために pdfbox などのサードパーティ ライブラリを呼び出すと、各メソッドが機能することが期待されます (pdfbox プロジェクトの一部としてテストされているため)。drawSquare メソッドが実際に正方形を描画するかどうかはテストしていませんが、統合テスト中に、エクスポート PDF 機能が希望どおりに PDF を正しくエクスポートすることがわかります。

したがって、質問は実際には、「どのテスト フェーズでスプリング データの使用をテストする必要がありますか?」と言い換える必要があります。

4

2 に答える 2

4

いいえ。原則として、プラットフォームをテストしないでください。

于 2012-11-03T22:40:59.777 に答える
4

First, there is no code generated at all. We built a query meta model from the query methods you declare and dynamically execute these queries. The short answer here is: you definitely should test these methods declared. The reason is as obvious as it is simple: the query method declarations - no matter if they use derived queries or manually declared ones - interact with the mapping metadata you defined for your entities. Thus, it's definitely reasonable to check the query method execution to make sure you see the expected results. This then of course an more of an integration test and a semantical check for the queries executed, rather than a classical unit test.

于 2012-11-04T07:31:53.260 に答える