我已经四处搜索,但未能成功确定以下方法是否可行/良好做法.基本上我想做的是以下内容:
创建使用DBUnit初始化数据的JUnit测试.运行多个测试方法,每个测试方法都使用相同的初始数据集.在每个测试方法之后回滚到初始setUp函数之后的状态.在所有测试方法运行后,回滚在setUp函数中进行的任何更改.此时,数据库中的数据应与运行JUnit测试类之前的数据完全相同.
理想情况下,我不必在每个测试用例之前重新初始化数据,因为我可以在setUp之后立即回滚到状态.
我已经能够回滚单个测试方法,但是在所有测试方法运行后无法回滚在setUp中进行的更改.
注意:我知道DBUnit的不同功能,如CLEAN_INSERT,DELETE等.我使用Spring框架来注入我的dataSource.
示例布局如下所示:
public class TestClass {
public void setUp() {
// Calls a method in a different class which uses DBUnit to initialize the database
}
public void runTest1() {
// Runs a test which may insert / delete data in the database
// After running the test the database is in the same state as it was
// after running setUp
}
public void runTest2() {
// Runs a test which may insert / delete data in the database
// After running the test the database is in the same state as it was
// after running setUp
}
// After runTest1 and runTest2 have finished the database will be rolled back to the
// state before any of the methods above had run.
// The data will be unchanged as if this class had never even been run
}
我将在开发数据库中运行测试,但我宁愿不影响数据库中当前的任何数据.我可以在开始时运行CLEAN_INSERT以初始化数据,但是在所有测试方法运行之后,我希望数据回到我运行JUnit测试之前的状态.
提前致谢
最佳答案 就像“setUp”一样,JUnit提供了在每个测试方法之后执行的“tearDown”方法.你可以用来回滚.从JUnit 4开始,您还有以下注释:
> @BeforeClass:在测试用例中运行任何测试之前运行一次
> @Before:每次运行测试方法之前运行
> @After:每次测试后运行一次
> @AfterClass:在执行当前套件中的所有测试后运行一次