2

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

4

1 回答 1

1

在我看来,这比你团队的开发人员知道他们在做什么要好。

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

请看一下为什么在测试 ORM 代码时需要避免误报

于 2013-01-09T11:43:04.933 回答