2011-12-22 40 views
26

私はSpringアプリケーション(Spring 3.0)に続いて、レイヤードアーキテクチャ、つまりController -> Service -> DAO layersに取り組んでいます。SpringサービスとDAO層をテストするJunit

Junitを使用して、サービスとDAOレイヤーのユニットテストケースを記述したいと思います。
私はSpringの公式サ​​イトをチェックして、他の多くのサイトも試しましたが、簡単で簡単な方法を見つけられませんでした。

誰でも私に役立つリソースを提供できますか?


EDIT:
Mockitoは良い選択肢であるように見えます。 Springで使うための良いリンク。

アレックスに提案してくれてありがとう。

+0

注意。リンク「Mocking service layer」は悪意のあるページにつながります。 – Cenobyte321

+0

@ Cenobyte321ありがとうございました、リンクは削除されました。 – xyz

+0

ハイバネートとスプリングブートを使用する場合、テストを開始するときに初期化されたメモリデータベースのH2を設定しないのはなぜですか?次に、テストクラスでAnnotation SpringBootTest AutoConfigureTestEntityManager Transactionalを使用し、あなたのDAOをAutowiredすれば、実際にはモックなしでテストできます。より良いあなたはMockMvcを使用してコントローラからあなたのウェブサービス全体をテストすることができます(そして、あなたはdaoを使用するコントローラ使用サービスを推測します) – amdev

答えて

25

リソースに関して言えば、テストに関するSpringのドキュメントはとても良いです。これはhereです。

サービスレイヤーをテストするときは、Mockitoなどのモッキングライブラリを使用してDAOをモックし、ドメインレイヤーをモックする必要があります。これにより、それらが真の単体テストであることが保証されます。

DAOをデータベースと統合してテストするには、そのリファレンスドキュメントに記載されているSpringトランザクションテストユーティリティを使用できます。

+0

ありがとうございます。私はモッキートを知らなかった。あなたを試して更新します。 – xyz

+0

私はMockitoが非常に強力で使いやすいことを発見しました。すべてのサービスユニットテストで使用されます。 –

+0

ちょうど見て、試してみました。ありがとう。 MockitoをSpringサービスのテストに使用するにはいいリンクがありますか? – xyz

4

リソースについてあまり知らないが、あなたは素敵なあなたのDAO +春のセットアップを持っている場合は、それを行うのは難しいことではありませんでください。次のものが必要です:

  1. JUNIT従属性があります。

    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.8.2</version> 
    </dependency> 
    
  2. テストクラス、あなたはSRC /テスト/ javaの内側に配置します:Mavenの、そのようなもので

    @TransactionConfiguration(defaultRollback = true) 
    @ContextConfiguration({ "classpath:test-spring-context.xml" }) 
    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    public class SomeTests { 
        // ... 
    } 
    
  3. あなたの春のセットアップのためのコンテキストファイルは、あなたのDAOデータソースには、内側に参照しますsrc/test/resourcesにあります。テスト抗バネのcontext.xmlで どこか:

    <import resource="datasource-test.xml" /> 
    

今すぐ日食で、たとえばあなたはJUnitテストとしてプロジェクトを実行することができます。

詳細がさらに必要ですか?このソリューションは適用可能ですか?

+0

ありがとうございました。サービス層をどのようにテストできますか? – xyz

+0

正確なサービスはあなたのためにはわかりませんが、私はアプリケーションロジックを保持していると仮定しています。コントローラが指示するたびにDAOにCRUDメソッドを呼び出します。もしそうなら、違いはありません。上記の設定でサービスクラスを挿入し、メソッドを呼び出し、結果を比較した後、すべてがロールバックされます。 – Pete

+0

はい。サービスとは、DAOメソッドを呼び出すクラスを意味します。 – xyz

関連する問題