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