我有一个指向mysql数据库的应用程序。
我一直在尝试使用DBUnit来设置我的测试环境,这很好。
问题是,在配置DBUnit时,我将其指向SAME-mysql数据库。因此,当执行DBUnit时,它会获取指定的dataset.xml并覆盖原始数据库中的信息。这是有道理的,因为我把它指向了哪里。
问题是,我是否应该创建一个只用于测试的新数据库,以便我的DBUnit能够指向它?如果是这样,我将如何管理我的原始数据库和用于测试的数据库之间的结构同步?
提前谢谢。
我是否应该创建一个只用于测试的新数据库,以便我的DBUnit可以指向它?
这是一种更好的方法,因为它可以消除多个问题。
我将如何管理原始数据库和测试数据库之间的结构同步?
你的持久性堆栈中没有提到技术,比如Hibernate、Spring/Spring-Boot/Spring-Data/Fireway/LiquiBase/等等。建议如何实现这一点。通常,在测试运行启动时在模式中运行DDL(可以从像Flyway这样的托管DDL中运行,也可以从Hibernate中自动生成)。
此外,我喜欢的典型测试方法是:
- 内存/嵌入式数据库的速度,如ApacheDerby,在启动测试之前自动启动
- 使用Hibernate DDL gen从带注释的实体中创建模式中的表
- 任何表中都没有现有的行;当将嵌入式数据库的任何文件存储在构建输出目录的子目录中时,嵌入式数据库和干净的构建会自动发生这种情况
- 使用DatabaseOperation.CLEAN_INSERT[0]配置的dbUnit
- 每个测试的最小dbUnit数据