6

私は自分のサービスの単体テストを書いています。

@Test
@Rollback(value = true)
public void testMethod()
{
   // insert test data

    myService.Method(); // read/write from DB

   // asserts go here
}

アプリケーションの実行中、メソッド A が入力されるたびに新しいトランザクションが作成されます。しかし、単体テストの実行中 - テスト testMethod に入ったとき。したがって、メソッド A は新しいものを作成しません。適切なテストのために、テスト内のサービスへのすべての呼び出しの前にキャッシュをクリアする必要があります。各単体テストでサービスへの呼び出しの前に Session.clear() を書きたくありません。ここでのベスト ベスト プラクティスは何ですか?

4

2 に答える 2

11

EntityManager には、すべての永続化コンテキストを削除するclear()メソッドがあります。

永続化コンテキストをクリアして、すべての管理対象エンティティを切り離します。データベースにフラッシュされていないエンティティへの変更は保持されません。

そのメソッドの直後にクエリを呼び出すと、データベースから直接取得されます。キャッシュからではありません。

すべてのテストの前にこれを実行する場合は、ExternalResourceをサブクラス化し、すべてのまたはでメソッドを実行することにより、JUnit @Ruleを使用することを検討してください。これは、すべてのデータベース テストで再利用できます。before()after()

于 2013-07-26T11:49:14.733 に答える