web-dev-qa-db-ja.com

Spring @TransactionalはJUnitテストで機能しませんか?

Spring 3.2、Hibernate、JUnit4を使用しています。

私のDaoクラスは次のとおりです。

@Transactional public class SomeDaoImpl implements SomeDao {

Webアプリケーションから直接実行した場合、この作業の更新操作。ただし、更新メソッドを実行するjunit統合テストでは、実際には変更が保持されないことがわかりました。 junitメソッドが実行されたときにトランザクションをロールバックするものはありますか?

12
Nilesh

参照 により、トランザクションはSpringのテストコンテキストで永続化されません。前述のように、珍しいことですが、それでもそうする必要がある場合は、 @TransactionConfiguration および @Rollback デフォルトの動作を変更します。

24
nobeh

DAOはトランザクションであってはなりません。 DAOは、より大きなトランザクションに参加する必要があるかどうかをどのように知ることができますか?

サービスは、典型的なSpring階層アーキテクチャでトランザクションを所有する必要があります。

データベースの単体テストは、データベースがロールバックするような方法で実行するのが一般的です。ドロップして自由に再作成できるテストデータベースを設定していない限り、テストによってデータベースが変更されることは望ましくありません。

質問は次のようになります。書かれているように、テストはどのようにトランザクションをコミットしますか?コミットしないと、レコードが表示されません。

12
duffymo

ドキュメントの「テスト」セクションから 、を使用できます

 @Rollback(false) 

springJUnit4ClassRunnerにトランザクションをロールバックさせたくない場合はアノテーション。

8
stevedbrown