Spring と JUnit を使用して、DAO の統合テストを作成しています。テスト メソッドの最初にテスト データを設定し、その後同じテスト メソッドで DAO メソッドをテストします。問題は、トランザクションをフラッシュ/コミットしないと、EntityManager が、データ設定で作成したばかりのエンティティの同じインスタンスを返すことです。常に合格するため、テストが役に立たなくなります。
例えば
@Test
@Transactional()
public void loadTreeBasicCase() {
// creates and saved node to DB
Node n = createNode();
// test DAO
Node result = dao.lookup(n.getId());
// verify
assertThat(n, equalTo(result));
}
1 つの方法は、DAO で commit() および/または flush() メソッドを公開することです。しかし、本番コードでは、これが発生する必要はほとんどないため、これを実行しないことをお勧めします (EntityManager に任せてください)。アノテーションまたはSpring構成でこれを構成する方法はありますか? Spring、JPA2、Hibernate を使用しています。