Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在@before方法中保存状态,执行@test,然后在@after中回滚更改_Java_Spring_Junit - Fatal编程技术网

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

Java 在@before方法中保存状态,执行@test,然后在@after中回滚更改,java,spring,junit,Java,Spring,Junit,我想知道这是否可能。这是我的第一个问题,所以如果我没有严格遵守协议,请容忍我。我能够使用事务模板回滚事务。但是现在我要做的是在标记为@before的方法中保存一个状态,然后在@after方法中回滚它 例如,这是我以前的经历: _transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWith

我想知道这是否可能。这是我的第一个问题,所以如果我没有严格遵守协议,请容忍我。我能够使用事务模板回滚事务。但是现在我要做的是在标记为@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);
}
请让我知道,如果你不明白或想详细说明。
提前谢谢

完成doInTransactionWithoutResult后,事务状态将无效,因此您不能在事后测试方法中使用它

看起来您正在使用spring进行测试。Spring附带了TestRunner,它可以在测试完成时回滚事务


那么问题出在哪里?代码不起作用?抛出错误?抛出错误。“JDBC调用中的参数无效:3B001保存点异常:规范无效”。“无法回滚到JDBC保存点;嵌套异常为java.sql.SQLException:JDBC调用中的参数无效:3B001保存点异常:org.springframework.JDBC.datasource.jdbtransactionobjectsupport.rollbackToSavepoint的规范无效(jdbctTransactionobjectsupport.java:132)”为什么不能在全局变量中保存事务状态?我对spring很陌生,可能会接受这个答案,但我只想知道。@publ1c_stat1c如果TransactionCallback没有引发异常,TransactionTemplate中的execute方法将提交事务。如果引发异常,则事务将回滚。因此,您无法回滚已提交的事务。这很有意义。非常感谢你的帮助!