Reputation: 759
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
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