我们有一个Java-Tomcat项目,使用Spring,JPA,maven build,JUnit用于单元测试,TestNG用于集成测试。
某些集成测试需要一个数据库,因此每次运行mvn verify
时都会创建一个新的数据库。现在的问题是填充测试数据。
我应该调查dbunit,使用JPA或其他方式自己保留对象吗?
如何在DB中加载测试数据,每次运行集成测试以获得稳定的测试环境?
答案 0 :(得分:2)
我正在使用dbunit
内存数据库。加载特定的测试数据集,运行测试,在每次测试后验证数据库内容以及在测试运行后清理数据库都很有帮助。
dbunit
的“优点”是它允许您在每次测试之前和之后控制数据库的状态。 “缺点”是您将使用自定义xml格式而不是SQL来处理测试数据集。您可以从sql导出到此自定义xml格式,但仍需要偶尔手动编辑xml文件。
答案 1 :(得分:1)
我获取了一个实时数据库的副本,并使测试具有事务性,因此每次都会回滚它们。
答案 2 :(得分:0)
我们使用Dbunit。 我们在@BeforeClass方法中在junit中加载测试数据。 并删除/清除@BeforeClass和@AfterClass方法中的数据。
答案 3 :(得分:0)
现在问题是填充它以获得测试数据
由于每个集成测试可能需要具有不同的测试数据,我认为这应该作为每个集成测试的设置阶段的一部分来完成。
答案 4 :(得分:0)
有两种模式可以考虑 Fresh Fixture 和 Shared Fixture。第一个提供了更好的测试隔离,因为它是为每个测试用例重新创建测试数据,即确保干净的状态。后者引入了测试耦合的风险,但由于在许多测试中重用相同的测试数据实例,因此速度更快。 Meszaros:xUnit 测试模式中详细描述了两者。
无论选择如何,都值得考虑在测试安排器之上设计的随机数据驱动方法:How to organize tests with Test Arranger。据我所知,就维护成本和所需的代码量而言,这是最便宜的方法。