【问题标题】:How to rollback back one method and commit second one in test如何回滚一种方法并在测试中提交第二种方法
【发布时间】:2019-02-28 00:51:10
【问题描述】:

我有如下代码

@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 spring-transactions spring-test


【解决方案1】:

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

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

希望对您有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多