我对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有一个外键到另一个表(不允许Cascade,None )。到目前为止一切都很好。
现在,如果我删除iUserService.flush() 然后不会发生预期的异常,因为sql没有被发送到DB。
我尝试将flush()添加到拆解的@After方法中,但是这不起作用,因为测试没有在测试方法之外看到异常。
有没有办法避免在测试方法中调用flush?
如果团队中的开发人员在测试代码中根本不需要使用flush方法,那将是更好的选择
编辑: 我尝试添加以下
@Before
public void before() {
Session session = entityManagerFactory.createEntityManager().unwrap(Session.class);
session.setFlushMode(FlushMode.ALWAYS);
}
但在每次查询之前似乎都会刷新sqls。
答案 0 :(得分:1)