dbunit如何同步真实数据库和测试数据库
dbunit how to sync real database with test database
我有一个指向 mysql 数据库的应用程序。
我一直在尝试使用 DBUnit 来设置我的测试环境,效果很好。
问题是在配置 DBUnit 时我将其指向同一个 mysql 数据库。因此,当执行 DBUnit 时,它会获取指定的 dataset.xml 并覆盖我原始数据库中的信息。这是有道理的,因为有我指向的地方。
问题是,我是否应该只为测试创建一个新数据库以便我的 DBUnit 可以指向它?如果是这样,我将如何管理原始数据库和测试数据库之间的结构同步?
提前致谢。
am I supposed to create a new database only for tests so my DBUnit can point to it?
这样做是一种更好的方法,因为它消除了多个问题。
how would I manage the structure synchronization between my original database and the one for tests?
您没有在持久性堆栈中提及技术,例如 Hibernate、Spring/Spring Boot/Spring Data/Flyway/LiquiBase/etc。建议更多如何实现这一点。通常,运行 模式中的 DDL 在测试 运行 启动时(来自 Flyway 之类的托管 DDL 或来自 Hibernate 的自动生成)。
此外,我首选的典型测试方法是:
- 一个 in-memory/embedded 速度快的数据库,例如 Apache Derby,在启动测试之前自动启动。
- 使用来自注释实体的 Hibernate DDL gen 在模式中创建表。
- 任何表中都没有现有的行;当将其任何文件存储在构建输出目录的子目录中时,嵌入式数据库和干净的构建会自动发生。
- dbUnit 配置为 DatabaseOperation.CLEAN_INSERT [0].
- 每个测试的最小 dbUnit 数据。
我有一个指向 mysql 数据库的应用程序。
我一直在尝试使用 DBUnit 来设置我的测试环境,效果很好。
问题是在配置 DBUnit 时我将其指向同一个 mysql 数据库。因此,当执行 DBUnit 时,它会获取指定的 dataset.xml 并覆盖我原始数据库中的信息。这是有道理的,因为有我指向的地方。
问题是,我是否应该只为测试创建一个新数据库以便我的 DBUnit 可以指向它?如果是这样,我将如何管理原始数据库和测试数据库之间的结构同步?
提前致谢。
am I supposed to create a new database only for tests so my DBUnit can point to it?
这样做是一种更好的方法,因为它消除了多个问题。
how would I manage the structure synchronization between my original database and the one for tests?
您没有在持久性堆栈中提及技术,例如 Hibernate、Spring/Spring Boot/Spring Data/Flyway/LiquiBase/etc。建议更多如何实现这一点。通常,运行 模式中的 DDL 在测试 运行 启动时(来自 Flyway 之类的托管 DDL 或来自 Hibernate 的自动生成)。
此外,我首选的典型测试方法是:
- 一个 in-memory/embedded 速度快的数据库,例如 Apache Derby,在启动测试之前自动启动。
- 使用来自注释实体的 Hibernate DDL gen 在模式中创建表。
- 任何表中都没有现有的行;当将其任何文件存储在构建输出目录的子目录中时,嵌入式数据库和干净的构建会自动发生。
- dbUnit 配置为 DatabaseOperation.CLEAN_INSERT [0].
- 每个测试的最小 dbUnit 数据。