2011-04-25 3 views
2

適切な@ContextConfigurationと@RunWithアノテーションが付いたJUnitテストクラス内でDAOテストを実行します。個々のテストでは、いくつかのデータをデータベースに格納し、健全性をチェックします。その後、データベースの状態を整理する予定です。メソッド/クラスを@Transactionalとマークするのは簡単な方法ですが、メソッドはトランザクション内で実行され、ロールバックは必要に応じて実行されます。Spring @ContextConfigurationのトランザクションテスト - データベースの問題をクリアする

問題は、DAOテストのこのアプローチが環境を完全にシミュレートしていないことです。私のJPAエンティティには、怠惰なコレクションフィールドがあります。私のコントローラコードでは、このエンティティをmyDao.getMyEntity(id)コールで取得し、遅延コレクションを繰り返します。アプリケーションランタイムで取得するのはLazyInitializationExceptionですが、実際にはトランザクションであるため、これはテストでは発生しません。 @Transactionalではないテストでテストを実行するにはどうすればよいのですか?テスト終了時にデータはまだクリアされていますか?

私はメモリ内のHSQLDBを使ってテストを行います。

答えて

1

私は、開始するために、私は実際のデータへのアクセスをテストしてる場合ではhttp://static.springsource.org/spring/docs/3.0.x/reference/testing.html#testcontext-tx

これを読んでいました、私は通常、試験前にデータをロードするためにDBUnitのを使用して、後でそれをクリーンアップします。これらのテストでは、@Transactionalアノテーションを使用しません。テスト対象のクラスが実際にデータベースとどのようにやりとりをしているのか、テスト環境内でどのように動作するのかを見たいからです。