2

大きなテストクラスを書こうとしています。

Junit、Hibernate、TopLink、および H2 データベースを使用しています。この前は、EJB3Unit (Hibernate と H2 を含む) を使用していました。

私のテスト クラスには 57 個のテスト メソッドがあります。一度にすべてのテストを実行すると、ランダム化された 1 つ以上のテストが失敗します。各テストを単独で実行すると、エラーは発生しません。

誰が何が問題なのか考えていますか? どうすればこれを防ぐことができますか?

  1. テスト メソッドごとに、別の名前で新しいインメモリ データベースを作成します。
  2. 新しい entitymanagarfactory と entitymanagar インスタンスを作成します。
  3. 二次キャッシュを無効にしました。
  4. スクリプトを使用してすべてのテーブルを作成します(エラーは発生しないため、データベースは本当に新鮮です)。
  5. 私はいくつかのdbアクションとテストを行います。
  6. セッションとemをクリアします。
  7. インメモリ データベース内のすべてのオブジェクトを削除します
  8. データベースをシャットダウンしました
  9. 私はemとemfを閉じます。

もっとやらなければならないことはありますか?

どうもありがとう...

4

2 に答える 2

1

テスト間に依存関係があるようです。理想的には、各テストの後、tearDown メソッドを使用してデータベースを元の状態に復元する必要があります (JUnit 4 では @After アノテーションを使用します)。

すでにそれを行っている場合、依存関係はより微妙です。その原因を突き止めるには、テストのバイナリ検索を開始することをお勧めします。テストの半分をコメントアウトします。ランダムな失敗が続く場合は、残りの半分をコメントアウトします (など)。失敗が解消された場合、問題は残りの半分にあります: コメントを外し、残りの半分をコメントアウトします。このプロセスは非常に迅速に収束します。

良い狩り。

于 2010-01-14T17:12:56.897 に答える
0

依存関係は、このランダムな失敗の可能性があります。

別の理由として、コレクション内の要素の順序が考えられます。かつて私はテストを書いていて、最初の要素に依存していました。ソートされていなかったので、求めていたオブジェクトが常に同じかどうかわかりませんでした。

于 2010-02-12T14:08:59.633 に答える