如何回滚一种方法并在测试中提交第二种方法

时间:2018-09-24 13:27:44

标签: spring spring-transactions spring-test

我有一些类似如下的代码

@Test
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void testCallDb() {
    rollbackThis();
    commitThis();
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Commmit
public void commitThis() {
    //do some work and commit
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Rollback
public void rollbackThis() {
    //do some work and rollback
}

运行此命令时,它总是回滚,这两种方法都不会回退,即不提交commitThis()方法数据。如果我将@Commit放在testCallDb()上,则两种方法都会提交,包括我想回滚的rollbackThis()方法。

使用Spring注释(最好)或使用其他方法对此有什么解决办法吗?

更新: 作为解决方案,我使用了@Huy的建议,即从commitThis()rollbackThis()删除了注释,并将testCallDb()的正文更改为:

rollbackThis();
TestTransaction.flagForRollback();
TestTransaction.end();
TestTransaction.start();
TestTransaction.flagForCommit();
commitThis();

1 个答案:

答案 0 :(得分:1)

从Spring Framework 4.1开始,您可以使用TestTransaction中的静态方法以编程方式与测试管理的事务进行交互。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/transaction/TestTransaction.html

希望对您有帮助。