paskos
paskos

Reputation: 759

How to override config value from @PropertySource used in a @ConfigurationProperties config class in a unit test using @TestPropertySource

I have a config properties instance with prefix "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;
   }
}

Its default configuration is defined in:

@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 contains:

assets.file=classpath:assets.json

In my unit test I want to override the default value using:

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

assets-config.properties contains

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

Unfortunately this value is never injected into AssetsProperties. What do I do wrong, I don't understand because spring fmk ref doc says

Test property sources have higher precedence than those loaded from the operating system’s environment or Java system properties as well as property sources added by the application declaratively via @PropertySource or programmatically.

Thanks in advance,

Paskos

Upvotes: 6

Views: 6258

Answers (1)

Andy Wilkinson
Andy Wilkinson

Reputation: 116061

You've hit a limitation in Spring Boot which means that it ignores properties files configured using @TestPropertySource. As an alternative, you can configure one or more inlined properties instead:

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

Upvotes: 8

Related Questions