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

How to rollback back one method and commit second one in 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();

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

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

希望对你有所帮助。