如何使用dbUnit将数据库恢复到初始状态?

我是自动化测试和dbUnit的新手.所以我很感激你的建议.

我将创建一个测试套件,它将按以下方式运行:

>创建一个内存H2数据库
>运行DDL脚本来创建表
>运行dbUnit以插入将由所有测试使用的初始数据(让我们称之为STATE0).
>运行测试

到那里它对我来说很好看,但我不明白的是,如何在测试运行后将数据库恢复到STATE0并更改数据?

我可以用dbUnit做到吗?
还是别的什么?
我应该在每次测试之前重新创建数据库吗?

简单的不在测试中提交事务不适合我,因为测试最终会运行多个事务,可能不止一个数据库连接.

解决方法

如果您正确地编写@BeforeClass,@ Before和@After方法,DBUnit可以自动完成四项工作.例如.在我们的项目中,使用Derby,就像一个这样的测试用例
public class MyTest {
    protected static IDataSet getDataSet() throws Exception {
        URL url = MyTest.class.getClassLoader().getResource("MyDataSet.xml");
        return new XmlDataSet(new FileInputStream(url.getPath()));
    }

    private static JdbcDatabaseTester databaseTester;

    @BeforeClass
    public static void setUpClass() throws Exception {
        // Init test environment,session etc.
        databaseTester = new JdbcDatabaseTester(
                "org.apache.derby.jdbc.ClientDriver","jdbc:derby://localhost:1527/myschema","username","password");
        databaseTester.setDataSet(getDataSet());
    }

    @AfterClass
    public static void tearDownClass() {
        // Close session etc.
    }

    @Before
    public void setUp() throws Exception {
        databaseTester.onSetup();
    }

    @After
    public void tearDown() throws Exception {
        databaseTester.onTearDown();
    }

    @Test
    public void test() throws Exception { ... }
}

代码在每次测试后将数据库模式的(子集)放回到MyDataSet.xml定义的状态. (注意,正如@Pascal评论的那样,重置可能并不总是满的 – 如果测试修改了不在数据集中的表,它将不受@Before / @After方法的影响.)

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...