2012-05-23 12 views
12

は4Spring @TransactionalはJUnitテストでは動作しませんか?次のように私は春3.2、HibernateとのJUnitを使用しています

マイダオクラスは次のとおりです。この作品に

@Transactional public class SomeDaoImpl implements SomeDao {

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

答えて

22

referenceのトランザクションは、ではありません。は、Springのテストコンテキストで保持されています。前述したように、珍しいですが、依然として行う必要がある場合は、@TransactionConfiguration@Rollbackを使用してデフォルト動作を変更することができます。あなたはSpringJUnit4ClassRunnerがあなたのトランザクションをロールバックしたくない場合は

11

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

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

通常、ロールバックするような方法でデータベースの単体テストを実行します。ドロップして自由に再作成できるテストデータベースを設定していない限り、テストでデータベースを変更する必要はありません。

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

+0

残念ながら、私は永続性のために休止状態を使用しています。 – Nilesh

+0

私の答えは変わりません。 – duffymo

+2

とにかくあなたの答えにコメントしてはならない:-)。あなたが上記のベストプラクティスはよく出版されています。私はあなたが賢明であることを試みることに迷って、本当の質問に答えるのを忘れたと思います! – Nilesh

関連する問題