在@before方法中保存状态,执行@test,然后回滚@after中的更改

时间:2012-06-12 19:50:17

标签: java spring junit

我想知道这是否可行。这是我的第一个问题,如果我不完全遵循协议,请耐心等待。我能够使用事务模板回滚我的事务。但是现在我要做的是在标记为@before的方法中保存状态,然后在@after方法中将其回滚。

例如,这就是我之前所拥有的:

      _transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
     protected void doInTransactionWithoutResult(TransactionStatus transactionStatus)
     {

                Object transactionStatusSavepoint = transactionStatus.createSavepoint();
                //do some work
                transactionStatus.rollbackToSavepoint(transactionStatusSavepoint);
      }
     });

这一切都运作良好。现在我想这样做:

@Before
    public void beforeTest() {
        _template.execute(new TransactionCallbackWithoutResult() {

            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {

                _transactionStatusSavepoint = _transactionStatus.createSavepoint();
            }
        });

@Test
public void foo(){//do some stuff}

@After
    public void afterTest() {
    _transactionStatus.rollbackToSavepoint(_transactionStatusSavepoint);
}

如果您不理解或想详细说明,请告诉我。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

doInTransactionWithoutResult完成后,交易状态无效,因此您无法在afterTest方法中使用它。

看起来你正在使用弹簧进行测试。 Spring带有测试运行器,可以在测试完成时回滚事务。

Spring testing