2013-05-29 149 views
0

我有一个单元测试,插入行到数据库中,我希望DBUnit后来自动清理这些行(DBUnit最初不插入这些行 - 这纯粹是被测试的代码的责任)。JUnit测试后清理数据库。

谢谢。

回答

1

使您的INSERT/UPDATE/DELETE查询事务处理,并在测试完成时将其回滚。

+0

感谢解决方案,但提交逻辑是存在于包含可测试的代码的功能,进一步我嘲笑DB使用DB单元所以我没有在测试提交的控制。 –

1

如果您使用JUnit4,则可以使用@AfterClass注释声明一个函数:它将在所有测试后执行,并且可以删除您在表中添加的所有行。

在JUnit3中,您没有任何等价物,但可以覆盖tearDown()方法,该方法将在每次测试后执行(相当于JUnit4中的@After批注)。

+0

纠正我的问题是如何在DBUnit中完成它。 –

0

如果您在Before方法中分配外部资源(文件/数据库),则需要在测试运行后释放它们。使用@After注释一个公共无效方法会导致该方法在Test方法之后运行。即使Before或Test方法抛出异常,所有@After方法也可以保证运行。在超类中声明的@After方法将在当前类的那些之后运行。

示例将文件显示为资源,但可以将其用于数据库清理。

public class Example { 
    File output; 
    @Before public void createOutputFile() { 
      output= new File(...); 
    } 
    @Test public void something() { 
      ... 
    } 
    @After public void deleteOutputFile() { 
      output.delete(); 
    } 
} 
+0

所以@Juned在你的代码让我假设我做了一个add()操作到数据库中的东西()函数,现在如何删除在@After中使用数据库单元插入的条目? –

+0

@UredReddy编写一个删除查询并执行After函数中的语句。 –