Java 如何加载集成测试数据

Java 如何加载集成测试数据,java,spring,maven,jpa,Java,Spring,Maven,Jpa,我们有一个JavaTomcat项目,使用Spring、JPA和maven构建,JUnit用于单元测试,TestNG用于集成测试 一些集成测试需要数据库,因此每次运行mvn verify时都会创建一个新的数据库。现在的问题是填充它以获得测试数据 我应该自己使用JPA或其他方式查看、持久化对象吗 如何在数据库中加载测试数据,每次运行集成测试时都有一个稳定的测试环境?我复制了一个实时数据库,并使测试具有事务性,因此每次都会回滚测试。我们使用Dbunit。 我们在junit中以@BeforeClass方

我们有一个JavaTomcat项目,使用Spring、JPA和maven构建,JUnit用于单元测试,TestNG用于集成测试

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

我应该自己使用JPA或其他方式查看、持久化对象吗


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

我复制了一个实时数据库,并使测试具有事务性,因此每次都会回滚测试。

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

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

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

现在的问题是填充它以获得测试数据


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

有两种模式需要考虑新夹具和共享夹具。第一种方法提供了更好的测试隔离,因为它涉及为每个测试用例重新创建测试数据,即确保干净的状态。后者引入了测试耦合的风险,但由于在许多测试中重用相同的测试数据实例,因此速度更快。Meszaros:xUnit测试模式中详细描述了这两种模式


不管选择如何,都可以考虑在测试编排上设计的随机数据驱动方法:据我所知,就维护成本和所需代码量而言,这是最便宜的方法。

只有在所有集成测试都需要相同的测试数据时,这种方法才有效。@Raedwald yes,他们需要相同的测试数据,因为这是相同的自动化测试。有时我们必须更改XML以适应数据模型中的更改。由于实时数据是可变的,因此您的测试用例可能无法重复。