私は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を使用しています。
もちろん、私に思い出させることに感謝します。私はDAOを介してエンティティマネージャを使用することに慣れています。私は単にそれを私のテストに配線して直接呼び出すことができないことを忘れていました。 :) – citress