我正在使用Spring和JUnit爲我的DAO編寫一些集成測試。我在測試方法開始時設置了我的測試數據,然後在相同的測試方法中測試我的DAO方法。問題是,如果我不刷新/提交事務,EntityManager將返回我在數據設置中創建的實體的相同實例 - 這會使我的測試無用,因爲它們將始終通過。單元測試期間提交/沖洗事務?
E.g.
@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));
}
一種方法是暴露我的DAO中的commit()和/或flush()方法。但我寧願不這樣做,因爲在生產代碼中,這幾乎不需要發生(讓EntityManager做它的事情)。有沒有一種方法可以通過註釋或Spring配置來配置?我使用Spring,JPA2和Hibernate。
當然,謝謝你提醒我。我很習慣通過DAO使用實體管理器,我忘記了我可以簡單地將它連接到我的測試中直接調用它。 :) – citress 2012-04-16 16:33:29