【发布时间】:2012-11-08 17:37:19
【问题描述】:
我对 Spring 还很陌生,正在做一些集成测试。 使用 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));
}
在上面的代码中,我调用了 iUserService.flush(),以便将 sql 发送到 DB,并发生预期的 DataIntegrityViolationException,因为存在从 User 到另一个表的外键(不允许级联,无)。到目前为止一切顺利。
现在,如果我删除 iUserService.flush() 那么预期的异常不会发生,因为 sql 没有被发送到数据库。
我尝试将 flush() 添加到拆卸 @After 方法中,但这不起作用,因为测试没有看到测试方法之外的异常。
有什么方法可以避免在测试方法中调用刷新?
如果我团队中的开发人员根本不必在他们的测试代码中使用 flush 方法会更好
编辑: 我尝试添加以下内容
@Before
public void before() {
Session session = entityManagerFactory.createEntityManager().unwrap(Session.class);
session.setFlushMode(FlushMode.ALWAYS);
}
但它似乎确实在每次查询之前刷新了 sql。
【问题讨论】:
标签: spring hibernate integration-testing