如何使用@TestPropertySource覆盖单元测试中@ConfigurationProperties配置类中使用的@PropertySource的配置值

时间:2015-02-09 19:51:09

标签: unit-testing spring-boot

我有一个配置属性实例,前缀为" assets。"

@Configuration
@ConfigurationProperties( prefix = "assets", ignoreUnknownFields = true )
public class AssetsProperties
{
   @NotNull
   private Resource     file;

   public Resource getFile()
   {
     return file;
   }

   public void setFile( Resource file )
   {
     this.file = file;
   }
}

其默认配置定义如下:

@Configuration
@PropertySource( name = "assetsConfig", value = "classpath:com/package/boot/web/ui/assets/config/default-assets-config.properties" )
@Order( LOW_ORDER )
public class AssetsConfig
{
}

default-assets-config.properties包含:

assets.file=classpath:assets.json

在我的单元测试中,我想使用:

覆盖默认值
@TestPropertySource( locations = "classpath:com/package/boot/web/ui/assets/tests/assets-config.properties" )

assets-config.properties包含

assets.file=classpath:com/package/boot/web/ui/assets/tests/assets.json

不幸的是,这个值永远不会注入AssetsProperties。 我做错了什么,我不明白,因为spring fmk ref doc says

  

测试属性源的优先级高于从操作系统环境或Java系统属性加载的属性源,以及应用程序通过@PropertySource或以编程方式声明性地添加的属性源。

提前致谢,

Paskos

1 个答案:

答案 0 :(得分:7)

您点击了limitation in Spring Boot,这意味着它会忽略使用@TestPropertySource配置的属性文件。作为替代方案,您可以改为配置一个或多个内联属性:

@TestPropertySource(properties = "assets.file=classpath:com/package/boot/web/ui/assets/tests/assets.json")