Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将整个DBUnit/JUnit测试包装在单个事务下_Java_Junit_Dbunit - Fatal编程技术网

Java 将整个DBUnit/JUnit测试包装在单个事务下

Java 将整个DBUnit/JUnit测试包装在单个事务下,java,junit,dbunit,Java,Junit,Dbunit,我已四处搜索,但未能确定以下方法是否可行/良好做法。基本上,我想做的是: 创建使用DBUnit初始化数据的JUnit测试。运行多个测试方法,每个测试方法使用相同的初始数据集。在每个测试方法之后回滚到初始设置功能之后的状态。所有测试方法运行后,回滚在设置函数中所做的任何更改。此时,数据库中的数据应该与运行JUnit测试类之前完全相同 理想情况下,我不必在每个测试用例之前重新初始化数据,因为我可以在设置之后立即回滚到状态 我可以回滚单个测试方法,但无法回滚在所有测试方法运行后在设置中所做的更改 注意

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

创建使用DBUnit初始化数据的JUnit测试。运行多个测试方法,每个测试方法使用相同的初始数据集。在每个测试方法之后回滚到初始设置功能之后的状态。所有测试方法运行后,回滚在设置函数中所做的任何更改。此时,数据库中的数据应该与运行JUnit测试类之前完全相同

理想情况下,我不必在每个测试用例之前重新初始化数据,因为我可以在设置之后立即回滚到状态

我可以回滚单个测试方法,但无法回滚在所有测试方法运行后在设置中所做的更改

注意:我知道DBUnit的不同功能,如CLEAN_INSERT、DELETE等。我正在使用Spring框架注入我的数据源

布局示例如下所示:

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测试之前的状态

提前感谢


我们在开源项目中解决了类似的问题。请查看位于engine\backend\manager\modules\dal\src\test\java\org\ovirt\engine\core\dao\BaseDAOTestCase.java的代码
大体上看一下我们在@BeforeClass和@AfterClass方法中做了什么。您可以根据每个方法使用它。为此,我们使用了Spring测试框架。

正如“setUp”JUnit提供了在每个测试方法之后执行的“tearDown”方法一样。可以用来回滚的。从JUnit 4开始,您还有以下注释:

  • @BeforeClass:在测试用例中运行任何测试之前运行一次
  • @Before:每次在测试方法之前运行
  • @之后:每次在测试方法之后运行
  • @AfterClass:在当前套件中的所有测试执行完毕后运行一次