Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 如何在类后回滚事务(使用TestNg和Spring)?_Java_Spring_Transactions_Testng - Fatal编程技术网

Java 如何在类后回滚事务(使用TestNg和Spring)?

Java 如何在类后回滚事务(使用TestNg和Spring)?,java,spring,transactions,testng,Java,Spring,Transactions,Testng,假设我们有下一个测试: @ContextConfiguration(classes = {MyDaoContext.class}) public class MyDaoTest extends AbstractTransactionalTestNGSpringContextTests { @Autowired private MyDao dao; @Test public void insertDataTest() { // insert data here and test som

假设我们有下一个测试:

@ContextConfiguration(classes = {MyDaoContext.class})
public class MyDaoTest extends AbstractTransactionalTestNGSpringContextTests {

@Autowired
private MyDao dao;

@Test
public void insertDataTest() {
    // insert data here and test something
}

@Test(dependsOnMethods = "insertDataTest")
public void modifyPreviouslyInsertedDataTest() {
    // get previously inserted data and test something
}
}
第二个测试将失败,因为当我们完成第一个测试时,插入的数据就消失了。 是否有一种方法可以在所有测试完成工作后回滚事务?

尝试以下方法(在JUnit中可以使用,我不确定TestBG)

当然,在这种情况下,您必须手动删除第一个方法中的数据

尝试以下方法(这在JUnit中会起作用,我不确定TestBG)


当然,在这种情况下,您必须手动删除第一个方法中的数据

每个测试在其自己的事务中运行,并在最后回滚。您可以通过在第一次测试中添加
@Rollback(false)
来调整它

现在的问题是,
insertDataTest
的事务已经完成,因此您应该删除它手动创建的内容。为此,您从中扩展的类有几个实用方法,例如
deleteFromTables
deleteFromTableWhere

这在
@AfterClass
之类的课程中应该是理想的


但那不是我会做的。我会将
insertDataTest
插入的数据分解到共享实用程序中。这样,您就可以在第二次测试中再次调用它,并删除
dependsOnMethods
。不建议使用这种依赖关系,因为您不能单独运行该测试。

每个测试在其自己的事务中运行,并在结束时回滚。您可以通过在第一次测试中添加
@Rollback(false)
来调整它

现在的问题是,
insertDataTest
的事务已经完成,因此您应该删除它手动创建的内容。为此,您从中扩展的类有几个实用方法,例如
deleteFromTables
deleteFromTableWhere

这在
@AfterClass
之类的课程中应该是理想的


但那不是我会做的。我会将
insertDataTest
插入的数据分解到共享实用程序中。这样,您就可以在第二次测试中再次调用它,并删除
dependsOnMethods
。不建议使用这种依赖关系,因为您无法单独运行该测试。

谢谢您的回复。但若我添加@Rollback(false),在所有测试完成后,数据将保留在DB中。我只需要在测试过程中使用DB数据,测试完成后我需要回滚所有插入。谢谢回复。但若我添加@Rollback(false),在所有测试完成后,数据将保留在DB中。我只需要在测试期间使用DB格式的数据,并且在测试完成后我需要回滚所有插入。有没有办法使用spring为我完成这项工作?(deleteFromTables或deleteFromTableWhere)调用这些方法时,您已经在使用Spring了。你在做什么?嗨,“将insertDataTest插入的数据分解到共享实用程序中”。请详细解释一下,有没有一种方法可以使用spring为我完成这项工作?(deleteFromTables或deleteFromTableWhere)调用这些方法时,您已经在使用Spring了。你在做什么?嗨,“将insertDataTest插入的数据分解到共享实用程序中”。请对此作更多解释
@ContextConfiguration(classes = {MyDaoContext.class})
public class MyDaoTest extends AbstractTransactionalTestNGSpringContextTests {

   @Autowired
   private MyDao dao;

   @Test
   @Rollback(false)
   public void insertDataTest() {
       // insert data here and test something
   }

   @Test(dependsOnMethods = "insertDataTest")
   public void modifyPreviouslyInsertedDataTest() {
       // get previously inserted data and test something
   }
}