dbunit如何将真实数据库与测试数据库同步



我有一个指向mysql数据库的应用程序。

我一直在尝试使用DBUnit来设置我的测试环境,这很好。

问题是,在配置DBUnit时,我将其指向SAME-mysql数据库。因此,当执行DBUnit时,它会获取指定的dataset.xml并覆盖原始数据库中的信息。这是有道理的,因为我把它指向了哪里。

问题是,我是否应该创建一个只用于测试的新数据库,以便我的DBUnit能够指向它?如果是这样,我将如何管理我的原始数据库和用于测试的数据库之间的结构同步?

提前谢谢。

我是否应该创建一个只用于测试的新数据库,以便我的DBUnit可以指向它?

这是一种更好的方法,因为它可以消除多个问题。

我将如何管理原始数据库和测试数据库之间的结构同步?

你的持久性堆栈中没有提到技术,比如Hibernate、Spring/Spring-Boot/Spring-Data/Fireway/LiquiBase/等等。建议如何实现这一点。通常,在测试运行启动时在模式中运行DDL(可以从像Flyway这样的托管DDL中运行,也可以从Hibernate中自动生成)。

此外,我喜欢的典型测试方法是:

  1. 内存/嵌入式数据库的速度,如ApacheDerby,在启动测试之前自动启动
  2. 使用Hibernate DDL gen从带注释的实体中创建模式中的表
  3. 任何表中都没有现有的行;当将嵌入式数据库的任何文件存储在构建输出目录的子目录中时,嵌入式数据库和干净的构建会自动发生这种情况
  4. 使用DatabaseOperation.CLEAN_INSERT[0]配置的dbUnit
  5. 每个测试的最小dbUnit数据

最新更新