Jua*_*uan 27 java spring junit4
我正在运行一个简单的JUnit测试再次应用程序DAO.问题是我总是得到:
javax.persistence.RollbackException: Transaction marked as rollbackOnly
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我明确表示不会回滚此方法.
Spring JUnit是否支持始终将回滚设置为true?
提前致谢,
Ral*_*lph 53
它应该像您期望的那样工作,但可能是您在被测试的类中打开另一个事务,或者您在某处有其他功能/或错误.
顺便说一下,这个注释应该是有用的:
@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
}
}
Run Code Online (Sandbox Code Playgroud)
Sni*_*las 11
想要一个改变数据库并保持修改的测试是很奇怪的.测试应该是正交的:没有测试取决于另一个.此外,测试应该独立于测试顺序,甚至是幂等的.
因此,要么想要在setUp()方法中更改数据库并回滚方法中的更改tearDown(),要么要在测试数据库中设置一些具有良好值的测试数据库.
也许我在这里遗漏了一些东西,但通常你不应该那样想.
小智 5
来自官方文档:
默认情况下,测试事务会在测试完成后自动回滚;但是,事务提交和回滚行为可以通过@Commit 和@Rollback 注释以声明方式配置
@Commit 表示应在测试方法完成后提交事务性测试方法的事务。@Commit 可用作 @Rollback(false) 的直接替代品,以便更明确地传达代码的意图。
| 归档时间: |
|
| 查看次数: |
64129 次 |
| 最近记录: |