如何在springboot中为集成测试创建liquibase变更集?

Bar*_*tek 6 integration-testing mocking liquibase spring-boot

我想通过liquibase changeset进行集成测试的模拟数据,如何使其不影响真正的数据库?我从这里找到了部分想法,但我使用的是springboot,我希望有更简单的解决方案.

bil*_*lak 8

您好,您可以使用liquibase的上下文参数.例如,创建changeset,它将从sql文件加载插入并为其指定上下文.

这样的事情:

<changeSet id="test_data_inserts" author="me" context="test">
    <sqlFile path="test_data.sql" relativeToChangelogFile="true" />
</changeSet>
Run Code Online (Sandbox Code Playgroud)

并在spring boot application.propertiesfor test中指定属性liquibase.contexts=test.

  • @KrzysztofTomaszewski 也许您可以编写从 test/resources 中的 main/resources 链接 yaml 更改日志的解决方案,因为我现在遇到了同样的问题。这将非常有帮助 (3认同)
  • 此解决方案不允许将与测试相关的工件保存在一个不好的单独文件和文件夹中。我想要一个单独的 liquibase 文件,它在运行测试时将虚拟地合并到主 liquibase 文件中。 (2认同)
  • 实际上,我在此期间找到了解决方案:用于测试的应用程序属性文件应覆盖liquibase文件名,文件夹“ test / resources”中应有一个liquibase文件,其中应包括“ main / resources”中的liquibase文件,并且其中可以包含一些更改-用于插入测试数据的集。 (2认同)

Ken*_*urt 7

假设生产变更集放置在 resources/db/changelog/changes 中,并且 /db/changelog 中有一个 db.changelog-master.yaml 具有以下配置

databaseChangeLog:
  - includeAll:
      path: db/changelog/changes
Run Code Online (Sandbox Code Playgroud)

将测试变更集放在 test/resources/db/changelog/testchanges 中,并使用以下配置在 test/resources/db/changelog 中创建 db.changelog-master.yaml

databaseChangeLog:
  - includeAll:
      path: db/changelog/changes
  - includeAll:
      path: db/changelog/testchanges
Run Code Online (Sandbox Code Playgroud)

测试应该在两个路径中选取所有变更集并运行