【问题标题】:JUnit4: @Transactional removes data even before testcase is completedJUnit4:@Transactional 甚至在测试用例完成之前删除数据
【发布时间】:2016-09-26 09:02:18
【问题描述】:

在我的 Spring 项目中,我使用 JUnit4 运行某些测试用例。我使用@Transactional 删除在测试用例期间对数据库所做的任何更改,以便新测试用例获得相同的初始数据库状态。问题是,在我的一个测试用例中,我在数据库中插入了一些值,然后在同一个测试中再次使用它们。看起来@Transactional 甚至在测试用例完成之前就删除了条目,因此我的测试没有按预期运行。我该如何解决这个问题?

是这样的

@Test()
@Transactional
    // Add entries to db and do some asserts

    // Use those entries to do some more asserts
}

第二部分不起作用,因为条目已经消失。有人可以帮忙吗。提前致谢!!

【问题讨论】:

  • 您是否尝试过调试问题?您确定事务在方法返回之前回滚了吗?您自己的方法之一是否有可能称为删除?
  • 根据你的代码,好像和@Transactional没有关系
  • @TheLostMind 我尝试在没有事务注释的情况下单独运行测试用例,并且测试用例按预期运行。我不会包括 Transactional 但类中还有其他测试用例会受到影响。我不认为我的任何方法都称为删除,因为在这种情况下,如果没有 Transactional,它也将无法工作。谢谢!!
  • @passion 我尝试在没有事务注释的情况下单独运行测试用例,并且测试用例按预期运行。所以我猜它与事务注释有关。谢谢!!

标签: java spring junit junit4


【解决方案1】:

您应该只在测试代码中执行此操作,而不是在生产代码中

手动操作事务通常不是一个好主意,但对于测试来说应该没问题,你只需要这样做:

@Test()
@Transactional
    // Add entries to db and do some asserts
    sessionFactory.getCurrentSession().flush()
    sessionFactory.getCurrentSession().clear()
    // Use those entries to do some more asserts
}

方法可以不同..但你可以看到想法..

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多