我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到:
javax.persistence.RollbackException: Transaction marked as rollbackOnly
JUnit测试是:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:com/my/app/context.xml"}
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@Transactional
public class PerformanceTest {
@Test
@Transactional(propagation= Propagation.REQUIRES_NEW)
@Rollback(false)
public void testMsisdnCreationPerformance() {
// Create a JPA entity
// Persist JPA entity
}
}
如你所见,我明确声明不回滚此方法。
Spring JUnit支持是否总是将rollback设置为true?
它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。
顺便说一句,这个注释应该是足够的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:com/my/app/context.xml"}
@Transactional
public class PerformanceTest {
@Test
@Rollback(false)
public void testMsisdnCreationPerformance() {
// Create a JPA entity
// Persist JPA entity
}
}
我在测试类的顶部有以下内容: 通过调试,我可以确认messageSource属性正在被模拟,并且不为null。测试用例最终达到这一点: 我确认我的消息属性文件中包含带有消息字符串的代码“DATA. IS. EMPTY”。我知道消息属性文件配置正确,因为我看到应用程序运行时消息出现在应用程序中。但是,在JUnit测试用例中,上面的getMessage返回为null。查看MessageSource的S
我在同一个测试类中有两个JUnit测试,每个都标记为@Transactional,第一个创建用户,第二个创建用户,并检查我们是否可以获得这些用户。 问题是,当第二个测试运行时,第一个测试创建的用户仍然在数据库中。 谢谢你抽出时间。
我正在努力做一个工作junit测试,以回滚在骆驼路由过程中发生的操作。 我有一个骆驼路线设置,可以监听目录。它需要一个csv文件。当csv文件出现时,它会创建新的SearchAnalytics数据。它会在csv文件中的每一行向表中添加新行。 我放的默认的Spring事务方法似乎不适用于骆驼路由上发生的操作。 下面的代码可以工作。但是它会永久保存数据,并且不会回滚插入。这意味着测试只会通过一次,除非
有一个@Value注释的常量,在运行测试时不会初始化,当构造函数中需要它时,它会抛出NullPointerException。 要测试的示例类: 示例测试类: 事情尝试了,但没有任何效果: 我已经创建了应用程序。具有所需值的属性文件 创建应用程序测试。属性,并添加了TestPropertySource(locations=“classpath:application test.properties
测试将创建的数据保存在H2测试数据库中,随后的测试在测试套件中执行时将失败。 我如何用事务绕过类的所有测试,并在类的所有测试执行后回滚所有数据库修改?