12

Spring 3.2、Hibernate、および JUnit 4 を使用しています。

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

@Transactional public class SomeDaoImpl implements SomeDao {

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

4

3 に答える 3

25

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

于 2012-05-23T11:30:02.297 に答える
13

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

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

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

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

于 2012-05-23T11:27:09.907 に答える
8

docs の「Testing」セクションから

 @Rollback(false) 

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

于 2012-05-23T11:31:18.803 に答える