hibernate - 仅创建和清理数据库设置一次以测试所有 DAO

标签 hibernate spring testing maven-2 junit4

<分区>

有谁知道实现以下 DAO 测试流程的方法:

  • 运行 SQL 脚本以创建通用数据库设置(将数据插入所有表)
  • 测试 DAO1
  • 测试 DAO2
  • 清理在第 1 步中创建的数据库数据

使用 Spring、Hibernate、JUnit、Maven 堆栈。

我知道最佳实践是我们为每个测试 DAO (@BeforeClass) 创建数据,并在所有测试完成后清理相同的数据 (@AfterClass)。

但在我们的例子中,不同数据库表之间的依赖关系太多(客户端的遗留数据库 :-( 目前对此无能为力)。用测试数据填充每个表也需要许多其他表中的数据. 因此,为每个 DAO 单独创建数据将是非常困难和耗时的。因此,我们真的只需要创建一次 DB 测试数据。

我在 BaseDAO 中使用静态 block 创建了测试数据(由每个 DAO 测试类扩展)——这显然只运行一次。但是当所有测试(所有 DAO 测试子类的)都完成时如何清理相同的问题。基类中的@AfterClass 拆卸方法将在每次 DAO 测试类完成后运行。

请指教。

最佳答案

如果您使用的是 Maven,一个不错的选择是使用 DBUnit .它允许您从数据库中导出测试数据(或者只是将其写入 XML),以便为您的测试导入。它有一个 Maven plugin这将满足您的要求。

关于hibernate - 仅创建和清理数据库设置一次以测试所有 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565420/

相关文章:

java - 如何保持内存中的java列表与数据库中的表同步?

java - 如何在 spring 中提供测试数据源?

java - 在 Spring boot 中使用 JPA 生成的序列 id(来自数据库序列)由其他服务器/实例共享,并导致违反唯一约束

java - Spring jpa spring.jpa.hibernate.ddl-auto :create ORA-02000: missing ALWAYS keyword

api - 概念:API级别测试

测试需要管理权限的程序的安装过程

php - 拉维尔 5 : Fatal error: Class 'TestCase' not found in

java - 如何使用实体限制实体数量?

sql - FBSQLException 键大小超出实现

java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named 'transactionManager' is defined @Spring + JPA