java – 在单个事务下包装整个DBUnit / JUnit Test

我已经四处搜索,但未能成功确定以下方法是否可行/良好做法.基本上我想做的是以下内容:

创建使用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:在执行当前套件中的所有测试后运行一次

点赞