我对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。