2012-04-06 13 views
4

私はCRUD操作を含むデータベーステストによくあると思います。したがって、これらの関数はデータベースを変更して期待値を変更します。 SELECTが2行を返すかどうかをテストすると、削除テストが1回実行されると、ただ失敗する可能性があります。 INSERTと同様です。 JUnitは定義されているようにテストを実行するようには見えず、期待値を厳しくします。JUnitデータベーステストとテストの注文

すべてのテストでデータベースが再初期化されていると、多すぎると処理が遅くなる可能性があります。どうすればこの問題に近づけることができますか?

答えて

3

はい、スティーブホール氏は、トランザクションテストを使用すると、テストとテストの実行の間のデータベースの一貫性の問題を100%解決すると指摘しています。 Springはこのタイプのテスト(transaction management in TestContext Frameworkを参照)に対して非常に精巧なサポートを提供していますが、それなしで実装することはそれほど困難ではありません。

最後にトランザクションをロールバックするトランザクションテストでは、テストによって開始されたトランザクションの一部である限り、データにCRUD操作を自由に適用できます。テスト中に単一のロールバックを実行すると、データベースに対するすべてのCRUDの影響が排除されます。

0

ユニットテストはオーダーに依存してはいけませんが、ユニットレベルテストでは通常、実際のデータベースを使用しないでください。 DBUnitのようなものを使用してデータベースをモックするか、データベースがサービスレイヤーインターフェイスの背後に隠れている場合は、そのためのモックを作成してください。

+0

私は@ Jeffに同意します。データベースとの統合をテストしない限り、Mockitoのようなものを使ってデータアクセスオブジェクトをモックする必要があります。 – MarkOfHall

1

DBUnitのようなものを見るとよいでしょう。それがあなたのニーズに合わない場合は、データベーストランザクションでテストをラップすることができます。 setupおよびteardownメソッドを使用して、トランザクションを開始およびロールバックすることができます。

関連する問題