Spring数据库集成测试,何时刷新或?

时间:2012-11-08 17:37:19

标签: spring hibernate integration-testing

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

1 个答案:

答案 0 :(得分:1)

以我的拙见,这比团队的开发人员更了解他们在做什么。

它包括默认配置的内容及其后果。

请查看您需要avoid false positives when testing ORM code

的原因