5

データベースのテストに CRUD 操作を含めるのは一般的だと思います。したがって、これらの関数はデータベースを変更して、予想される値を変更します。SELECT が 2 行を返すことをテストすると、削除テストが 1 番目に実行されると、失敗する可能性があります。INSERT に似ています。JUnit は、定義されているとおりにテストを実行していないように見えるため、期待値が難しくなっています。

テストごとにデータベースを再初期化すると、やり過ぎで遅くなる可能性があります。では、この問題にどのようにアプローチすればよいでしょうか。

4

3 に答える 3

4

はい、Steve Hall が指摘したように、トランザクション テストを使用すると、テストとテスト実行の間のデータベースの一貫性の問題が 100% 解決されます。Spring は、このタイプのテストに対して非常に精巧なサポートを提供します ( TestContext フレームワークのトランザクション管理を参照) が、Spring なしで実装するのはそれほど難しくありません。

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

于 2012-04-06T04:09:40.813 に答える
1

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

于 2012-04-06T03:19:53.870 に答える
0

単体テストは順序に依存するべきではありませんが、単体レベルのテストでは通常、実際のデータベースを使用するべきではありません。DBUnit などを使用してデータベースをモックするか、データベースがサービス層インターフェイスの背後に隠されている場合は、そのモックを作成します。

于 2012-04-06T03:18:58.340 に答える