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
}
}