2

私は春にはかなり新しく、いくつかの統合テストを行っています。Hibernate、MySql、および Spring データ JPA を使用します。私はトランザクション サポートを使用しており、各テストの最後にすべてがロールバックされます。

例えば:

@Test (expected=DataIntegrityViolationException.class)
public void findAndDelete() {
    UUID uuid = UUID.fromString(TESTID);
    User user= iUserService.findOne(uuid);
    iUserService.delete(cashBox);

    iUserService.flush();                

    assertNull(iUserService.findOne(uuid));
}

上記のコードでは、SQL が DB に送信されるように iUserService.flush() を呼び出します。ユーザーから別のテーブルへの外部キーがあるため、予想される DataIntegrityViolationException が発生します (カスケードは許可されません。なし)。これまでのところすべて順調です。

ここで、iUserService.flush() を削除すると、SQL が DB に送信されないため、予想される例外は発生しません。

flush() をティアダウン @After メソッドに追加しようとしましたが、テストではテスト メソッドの外部に例外が表示されないため、機能しませんでした。

テストメソッド内でフラッシュを呼び出さないようにする方法はありますか?

私のチームの開発者が、テスト コードでフラッシュ メソッドをまったく使用する必要がないことが望ましいでしょう。

編集:以下を追加してみました

    @Before
public void before() {
    Session session = entityManagerFactory.createEntityManager().unwrap(Session.class);
    session.setFlushMode(FlushMode.ALWAYS);

}

ただし、各クエリの前にSQLをフラッシュするようです。

4

1 に答える 1

1

In my humble opinion, it's better than the developers of your team know what they are doing.

It includes the things that are configured by default and the consequences of that.

Please, take a look to why you need avoid false positives when testing ORM code

于 2013-01-09T11:43:04.933 に答える