如何加载集成测试数据



我们有一个Java-Tomcat项目,使用Spring, JPA, maven构建,JUnit进行单元测试,TestNG进行集成测试。

一些集成测试将需要一个数据库,因此每次运行mvn verify时都会创建一个新的DB。现在的问题是填充它以获得测试数据。

我应该研究dbunit,使用JPA或其他方式持久化对象吗?

如何在DB中加载测试数据,每次运行集成测试时都有一个稳定的测试环境?

我使用的是dbunit内存数据库。这有助于加载特定的测试数据集、运行测试、在每次测试后验证数据库内容以及在测试运行后清理数据库。

dbunit的"优点"是它允许您在每次测试之前和之后控制数据库的状态。"缺点"是您将使用自定义xml格式的测试数据集,而不是SQL。您可以将sql导出为这种自定义xml格式,但您偶尔仍需要手动编辑xml文件。

我取了一个实时数据库的副本,并将测试设置为事务性的,以便每次都回滚。

我们使用Dbunit。我们在junit中的@BeforeClass方法中加载测试数据。并删除/清理@BeforeClass和@AfterClass方法中的数据。

现在的问题是填充它以包含测试数据

由于每个集成测试可能需要有不同的测试数据,我认为这应该作为每个集成测试的设置阶段的一部分来完成。

有两种模式可以考虑Fresh Fixture和Shared Fixture。第一个提供了更好的测试隔离,因为它是关于为每个测试用例重新创建测试数据,即确保一个干净的状态。后一种方法引入了测试耦合的风险,但速度更快,因为它可以在许多测试中重用相同的测试数据实例。在Meszaros中有详细的描述:xUnit Test Patterns

无论选择什么,都值得考虑在测试安排器之上设计的随机数据驱动方法:如何使用测试安排器组织测试。据我所知,就维护成本和所需的代码量而言,这是最便宜的方法。

最新更新