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

hujrc8aj  于 2023-05-17  发布在  Spring
关注(0)|答案(3)|浏览(117)

我想通过liquibase变更集集成测试模拟数据,如何使不影响真实的的数据库?我从here中找到了部分想法,但我使用的是springboot,我希望有更简单的解决方案。

iyfjxgzm

iyfjxgzm1#

您可以使用liquibase的上下文参数。例如,创建变更集,它将从sql文件中加载插入并为其指定上下文。就像这样:

<changeSet id="test_data_inserts" author="me" context="test">
    <sqlFile path="test_data.sql" relativeToChangelogFile="true" />
</changeSet>

在spring Boot 的application.properties中指定属性liquibase.contexts=test

eyh26e7m

eyh26e7m2#

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

databaseChangeLog:
  - includeAll:
      path: db/changelog/changes

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

databaseChangeLog:
  - includeAll:
      path: db/changelog/changes
  - includeAll:
      path: db/changelog/testchanges

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

qxsslcnc

qxsslcnc3#

使用@Krzysztof Tomaszewski的最终解决方案
测试的应用程序属性文件应覆盖liquibase文件名,文件夹“test/resources”中应有一个liquibase文件,其中应包括“main/resources”中的liquibase文件,并且它可以包含一些用于插入测试数据的更改集。
我最终得到了以下配置:

change-log: "classpath:db/liquibase-changelog-test.xml" //(1)
  search-path: "./src/test/resources,./src/main/resources" //(2)

(1)rewrite change-log file property(2)rewrite search-path property
liquibase-changelog-test.xml看起来像这样:

<include file="db/liquibase-changelog.xml"/> //changelog file in /src/main/resources  (creating schema etc.)
<include file="changes/01-insert-data.xml" relativeToChangelogFile="true"/> //changes file in /src/test/resources/db, file is relative to liquibase-changelog-test.xml file (inserting data for tests)

相关问题