0

Javaアプリケーションの単体テストに関連する奇妙なエラーが発生しています。

単体テストでは、カスタムデータが事前に入力されたメモリ内のHSQLDBを使用し(自動的にトリガーされる挿入スクリプトを介して)、ORMとしてHibernateを使用してアクセスします。

問題は次のとおりです。単一のクラス(つまり、TestDummyClass.java)で単体テストを開始すると、各メソッドのテスト後にdbが(元の挿入スクリプトから)再作成されます。

複数のテストクラスを含むプロジェクト全体(src / test)で単体テストを起動すると、DBは、各テストメソッドではなく、各テストクラスの最初に初期化されます。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:com/wizche/app-context-test.xml" })
public class TestDummyClass {
.....
}

これは、たとえば、TestDummyClassでDBを変更した場合(つまり、新しいオブジェクトを作成した場合)、新しいオブジェクトは同じクラスの次のテストメソッドのためにそこにとどまるということを意味します。したがって、プロジェクトまたは単一のクラスで開始した場合、アサートは異なるはずです。

なぜこれが起こっているのか誰かが私に説明できますか?clean-dbをいつ復元するかをどのように決定できますか?

注意:私は、テストプロジェクト全体(単体テストに関連するパラメーターがない)のカスタムコンテキスト構成でSpringJUnit4ClassRunnerを使用しています。NB2:SpringEclipseでJUnitを直接起動します

4

3 に答える 3

1

Eclipseは単一のJVMで単体テストを実行するため、理論的には単一のクラスで実行しても、src/testから実行するのと同じ動作が見られるはずです。すべてのテストを実行すると、問題が発生する可能性が高くなると思います。単一のクラステストを行うときに、各メソッドの後にDBが再作成されることを確認する理由は何ですか?これが正確であることを確認したいだけですか?

このリンクをチェックする前に、同様の質問が提起されています。役に立ちます。

于 2012-09-24T12:56:18.930 に答える
1

その理由は、SpringJUnit4ClassRunnerを使用する場合、複数のテストにまったく同じ場所を使用すると、アプリケーションコンテキストがキャッシュされる傾向があるためです。このキャッシュはスイート全体で行われるため、プロジェクト内のすべてのテストを単一のスイートで実行し、複数のテストで同じアプリケーションコンテキストの場所にある場合、キャッシュされたコンテキストを取得する可能性があります。コンテキスト内のBeanを変更すると、他のテストにも反映されます。

修正は@DirtiesContext、テストクラスまたはテストメソッドにアノテーションを追加することです

于 2012-09-24T13:05:05.077 に答える
0

DBUnitを使用して、データベースの構築と破棄を支援することをお勧めします。これをオンザフライで実行する方法を提供し、すべての主要なデータベースプロバイダーと対話します。

于 2012-09-24T13:20:31.680 に答える