假设我们有下一个测试:
@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
}
}
第二次测试将会失败,因为当我们完成第一次测试时,插入的数据就消失了。 在所有测试完成后,有没有办法回滚事务?
答案 0 :(得分:3)
每个测试都在自己的事务中运行,并在最后进行回滚。您可以通过在第一次测试中添加@Rollback(false)
来调整它。
现在的问题是insertDataTest
的交易已经完成,因此您应该删除它手动创建的内容。为此,您扩展的类具有多种实用方法,例如deleteFromTables
或deleteFromTableWhere
。
理想情况下,这应该是@AfterClass
或其他内容。
但那不是我会做的。我会将insertDataTest
中插入的数据分解为共享实用程序。这样,您可以在第二次测试中再次调用它并删除dependsOnMethods
。建议不要使用此依赖项,因为您无法单独运行该测试。
答案 1 :(得分:2)
尝试以下(在JUnit中可以使用,我对TestBG不确定)
@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
}
}
在这种情况下,您当然必须手动删除第一种方法中的数据