与Flyway集成测试

Joh*_*y19 6 spring integration-testing flyway

我正在使用Flyway来处理数据库迁移.一切正常:迁移文件的默认位置是:

main/resource/db/migration/V1...
Run Code Online (Sandbox Code Playgroud)

我正在运行集成测试,我的设置使用单独的数据库模式进行集成,我也想用flyway管理它.但是,集成测试位于test文件夹中(不是main).当Flyway bean执行时migrate(),它找不到迁移文件,因为它们位于main文件夹中.如果我将迁移文件放入其中test/resource/db/migration/V1...就可以了.

我真的不想将这些文件复制到test资源文件夹中,所以我不必同时维护它们.有没有办法强制Flyway使用与普通应用程序相同的迁移文件进行集成测试?

Flo*_* E. 7

另一个提示:对于数据库单元测试,您还可以使用Flyway测试扩展,请参阅https://github.com/flyway/flyway-test-extensions.

这些扩展还有一个用于数据加载的DbUnit集成插件,因此您可以控制测试环境中的数据库设置.

Adams的回答是正确的,不要将真正的数据库设置脚本复制到test/resources/db/migration/.

对于集成测试设置,您还可以执行以下选项中的一个或组合:

  1. 用于集成测试maven配置文件,并在此设置中添加一个特殊flyway-maven-plugin或gradle设置,test/resources/integration/migration/为脚本位置添加特殊文件夹.
  2. 用于测试相同文件夹test/resources/db/migration/并使用特殊版本,如V999.0.x__或simular.在这种情况下,flyway将始终填充数据库中所有检测到的脚本.
  3. 如果你有spring 4.x项目,你也可以使用Spring-test和SqlScriptsTestExecutionListner.在这里,您可以使用特定的加载功能来测试用例.
  4. 使用flyway-test-extensions

数据库集成测试提示:

  • 避免单个测试重置数据库.测试将更快更强大.
  • 每个测试数据设置应该是自包含的,不应受到其他测试运行的干扰.
  • 如果需要从现有交付实例升级,还需要在测试设置中为填充数据库添加迁移测试.=>测试您的迁移脚本.


Ada*_*ent 6

我假设您正在使用Maven?单元测试都test/resourcesmain/resources得到加载到类路径中。test/resources文件通常优先,因为它们放在类路径中的较高位置(如果我没记错的话)。无论如何,我不建议您这样做。

相反,我建议您对集成测试进行完全不同的Flyway配置,该配置位于单独的目录(即test/resources/integration/migration/)中,并在main/resources/db/migration默认目录之后运行。

即使这样,不使用Flyway来设置集成数据固定装置,而使用其他一些数据库数据加载工具(如DbUnit)(我敢肯定还有其他工具)可能会更容易。