java - JUnit4:@Transactional 即使在测试用例完成之前也会删除数据

标签 java spring junit junit4

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

是这样的

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

    // Use those entries to do some more asserts
}

第二部分不起作用,因为条目消失了。有人可以帮忙吗?预先感谢!

最佳答案

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

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

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

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

关于java - JUnit4:@Transactional 即使在测试用例完成之前也会删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39698637/

相关文章:

java - Tomcat maven 插件 - 无法加载类 "org.slf4j.impl.StaticLoggerBinder"

java - Windows 上用于 SVN Java 绑定(bind) (JavaHL) 的配对 JAR 和 native 库二进制文件?

java - libgdx 在受伤时改变 Sprite 颜色

spring - Bean 验证 - 验证可选字段

spring - IntelliJ : Spring MVC beans in JSP pages are not resolved

java - 一遍又一遍地运行相同的junit测试的简单方法?

java - 强制 JUnit 子类测试覆盖 @BeforeClass 方法

java - SQLiteJDBC 给 org.sqlite.MetaData.getImportedKeys not yet implemented error with Hibernate

Spring Data Neo4j (SDN) 4.0 运行时多态

java - 当Map被mock时如何从Map中获取元素