junit 在单元测试期间,不从资源文件夹中获取liquibase脚本

2vuwiymt  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(125)

我有以下项目结构

bin
  start.sh
db
  liquibase_scripts
    ...
    schema.json
main
  java
    ...
test
  resources
    liquibase_scripts
      ...
      schema.json

然后我构建了我的项目,将liquibase脚本添加到分布式文件夹db中。在单元测试中,我使用H2数据库,并希望从db/liquibase加载模式。我创建了bean

@Bean
    public SpringLiquibase springLiquibase() {
        SpringLiquibase springLiquibase = new SpringLiquibase();
        springLiquibase.setDataSource(dataSource());
        springLiquibase.setChangeLog("classpath:/liquibase/sam.json");
        return springLiquibase;
    }

问题是方法setChangeLog查看测试文件夹中的资源文件夹。因此,为了解决该问题,我将所有liquibase脚本复制到测试/资源目录。但这是不好的,因为现在我在不同的文件夹中有2个脚本副本。
是否有一种方法可以强制springLiquibase.setChangeLog在任何文件夹中查找脚本,而不仅仅是在test/resources中?

bwntbbo3

bwntbbo31#

在Maven构建配置中,您可以定义testResources,它可以是目录和文件。

<build>
    <testResources>
        <testResource>
            <directory>${project.basedir}/db/liquibase_scripts</directory>
        </testResource>
    </testResources>
</build>

通过这样的配置,Maven将文件复制到target/test-classes目录中。由于这样,这些文件可以在代码中用作测试资源,但在项目文件中没有重复。
我在我的一个项目中使用了这样的配置(Liquibase + testResources)。为了更好地重现您的问题,我创建了a separate branch,您可以在其中找到上面描述的配置-请参见:this commit diff。变更后所有测试均通过。

相关问题