当前位置: 首页 > 面试题库 >

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

彭硕
2023-03-14
问题内容

我是自动化测试和dbUnit的新手。因此,感谢您的建议。

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

  • 创建一个内存中的H2数据库
  • 运行DDL脚本以创建表
  • 运行dbUnit来插入将被所有测试使用的初始数据(我们称其为 STATE0 )。
  • 运行测试

到那里对我来说看起来不错,但是我不明白,是在测试运行并更改数据后如何将数据库还原为 STATE0

我可以使用dbUnit吗?
还是其他?
我应该在每次测试之前重新创建数据库吗?

在测试中简单地不提交事务对我来说不合适,因为测试最终将运行多个事务,并且可能运行多个数据库连接。


问题答案:

如果正确编写和方法@BeforeClass,DBUnit可以自动完成四个工作。例如,在我们的项目中,使用Derby,一个这样的测试用例看起来像@Before``@After

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 { ... }
}

此代码将DB模式(的一个子集)恢复到MyDataSet.xml每次测试后定义的状态。(请注意,正如@Pascal所评论的那样,重置可能并不总是完整的-
如果测试修改了不在数据集中的表,它将不受@Before/ @After方法的影响。)



 类似资料:
  • 概述 Sublime Text 可以通过删除 data 文件夹的方式恢复到初始状态。不同操作系统这个文件夹的位置也不同: OS X:~/Library/Application Support/Sublime Text 3 Windows:%APPDATA%\Sublime Text 3 Linux:~/.config/sublime-text-3 恢复到初始状态,你需要: 退出 Sublime T

  • 我正在做一个练习题,练习它 这个问题基本上是在PriorityQueue和某个k中传递,然后返回该PriorityQueue中的第k个最小值。您还需要将PriorityQueue恢复到其初始状态,并可以使用一个堆栈或队列作为辅助数据结构。 我的更高层次的伪思想是,因为PriorityQueue已经充当了最小堆,从JavaPriorityQueue,我真正要做的(我的算法)是: > 从Priorit

  • 问题内容: 首次启动应用程序后,我需要向SQLite数据库添加初始值。我该怎么办? 问题答案: 在DBAdapter.java类文件中,您可以执行此操作。 喜欢这种类型。

  • 问题内容: 部署应用程序时,我经常使用Hibernate的功能来创建数据库架构,以简化部署。通过配置hibernate.hbm2ddl.auto属性可以轻松实现。 但是,有时我还需要向数据库中插入一些初始数据,例如root用户。有什么办法可以通过hibernate并加载某种文本文件来实现? 我知道我可以很容易地对将要执行此操作的代码进行编程,但是只是想知道是否已经有一些实用程序可以帮助我通过配置实

  • 我有一个类似这样的JSON对象, 我正在我的vue模板中循环使用这个来创建一个选择菜单, 通过将select绑定到data_type,每次我进行select更改时,它都会更新数据/json中该对象的数据。我想知道的是,是否可以在更改之前获取旧值? 我试着做了一些事情, 但是,新值和旧值似乎是相同的?

  • 问题内容: 我在做练习题练习IT Kth最小 基本上,这个问题是您在PriorityQueue和某个k中传递的,并且要在那个PriorityQueue中返回第k个最小值。您还需要将PriorityQueue恢复为其初始状态,并且可以使用一个堆栈或队列作为辅助数据结构。 我的高级伪思维是,由于PriorityQueue已经充当了最小堆,因此从Java PriorityQueue中 ,我真正要做的(我