我正在使用 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));
}
一种方法是在我的 DAO 中公开 commit() 和/或 flush() 方法。但我不希望这样做,因为在生产代码中,这几乎不需要发生(让 EntityManager 做这件事)。有没有办法通过注释或在 Spring 配置中进行配置?我正在使用 Spring、JPA2 和 Hibernate。