【问题标题】:Flyway in common library that has integration tests具有集成测试的通用库中的 Flyway
【发布时间】:2019-12-11 10:02:36
【问题描述】:

我遇到了一个愚蠢的情况,我在公共库的 pom 文件中定义了我的 flyway 依赖项。这个通用库恰好有加载上下文的 Spring Boot 集成测试,所以当这些集成测试运行时,我得到了

java.lang.IllegalStateException: 找不到迁移位置:[classpath:db/migration](请添加迁移或检查您的 Flyway 配置)

我宁愿不在所有应用程序的 pom 中复制依赖项定义,也不能删除集成测试。我也不想有一个虚拟迁移文件夹。我可以在集成测试中以某种方式关闭它吗?

@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@DisableFlywaySomehow
public class MyITest {...}

【问题讨论】:

  • 使用不同的profile 并在application.{properties,yml} 文件中为该配置文件设置spring.flyway.enabled = false。您也可以对您用于相关工件的test 配置文件进行相同尝试...干杯!
  • 真正的问题是:为什么您的集成测试与您的 flyway 迁移位于同一地点?为什么它们不在单独的(子)模块中?
  • 等等.. 你是建议 flyway 迁移应该有自己的模块还是集成测试不属于公共库?后者我同意。前者对我来说是新闻。
  • @x80486 谢谢。我知道我错过了一些简单的东西。如果您愿意,请继续回答。
  • 从长远来看,那种柔术会让事情变得更糟。问题出在其他地方,你只是不想通过破解这个东西来创建另一个。

标签: java spring spring-boot flyway


【解决方案1】:

公平地说,您的集成测试应该在您的应用“当前”的任何状态下运行。这也意味着(如果适用)数据库。为什么不合并testcontainers 或类似工具来模拟真实情况,然后它将从源代码运行实际迁移,您将测试什么是必要的。

除非您在测试应用程序的完整性而不考虑数据库,否则禁用 db 听起来很狡猾。在这种情况下,将FlywayMigrationStrategy 提供为null - 它将停止执行任何迁移,并且您将没有数据库环境。

再一次 - 这取决于您的应用程序

【讨论】:

    【解决方案2】:

    使用不同的profile(尽管您也可以使用当前的test 配置文件)并在application.{properties,yml} 文件中设置spring.flyway.enabled = false。

    您还可以在逐个测试用例上使用 @TestPropertySource 注释。

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2020-05-17
      • 2014-08-30
      • 2018-11-27
      • 2012-09-16
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多