Annotation Type TestPropertySource
@Target(TYPE) @Retention(RUNTIME) @Documented @Inherited public @interface TestPropertySource
@TestPropertySource
is a class-level annotation that is used to configure thelocations()
of properties files and inlinedproperties()
to be added to theEnvironment
's set ofPropertySources
for anApplicationContext
for integration tests.Precedence
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 (e.g., via anApplicationContextInitializer
or some other means). Thus, test property sources can be used to selectively override properties defined in system and application property sources. Furthermore, inlinedproperties()
have higher precedence than properties loaded from resourcelocations()
.Default Properties File Detection
If
@TestPropertySource
is declared as an empty annotation (i.e., without explicit values forlocations()
orproperties()
), an attempt will be made to detect a default properties file relative to the class that declared the annotation. For example, if the annotated test class iscom.example.MyTest
, the corresponding default properties file is"classpath:com/example/MyTest.properties"
. If the default cannot be detected, anIllegalStateException
will be thrown.Enabling @TestPropertySource
@TestPropertySource
is enabled if the configured context loader honors it. EverySmartContextLoader
that is a subclass of eitherAbstractGenericContextLoader
orAbstractGenericWebContextLoader
provides automatic support for@TestPropertySource
, and this includes everySmartContextLoader
provided by the Spring TestContext Framework.Miscellaneous
- Typically,
@TestPropertySource
will be used in conjunction with@ContextConfiguration
. - This annotation may be used as a meta-annotation to create custom composed annotations; however, caution should be taken if this annotation and
@ContextConfiguration
are combined on a composed annotation since thelocations
andinheritLocations
attributes of both annotations can lead to ambiguity during the attribute resolution process.
- Since:
- 4.1
- Author:
- Sam Brannen
- See Also:
ContextConfiguration
,Environment
,PropertySource
,PropertySource
- Typically,
Optional Element Summary
Optional Elements Modifier and Type Optional Element Description boolean
inheritLocations
Whether or not test property sourcelocations()
from superclasses should be inherited.boolean
inheritProperties
Whether or not inlined testproperties()
from superclasses should be inherited.String[]
locations
The resource locations of properties files to be loaded into theEnvironment
's set ofPropertySources
.String[]
properties
Inlined properties in the form of key-value pairs that should be added to the SpringEnvironment
before theApplicationContext
is loaded for the test.String[]
value
Alias forlocations()
.
Element Detail
value
@AliasFor("locations") String[] value
Alias forlocations()
.This attribute may not be used in conjunction with
locations()
, but it may be used instead oflocations()
.- See Also:
locations()
- Default:
- {}
locations
@AliasFor("value") String[] locations
The resource locations of properties files to be loaded into theEnvironment
's set ofPropertySources
. Each location will be added to the enclosingEnvironment
as its own property source, in the order declared.Supported File Formats
Both traditional and XML-based properties file formats are supported — for example,
"classpath:/com/example/test.properties"
or"file:/path/to/file.xml"
.Path Resource Semantics
Each path will be interpreted as a Spring
Resource
. A plain path — for example,"test.properties"
— will be treated as a classpath resource that is relative to the package in which the test class is defined. A path starting with a slash will be treated as an absolute classpath resource, for example:"/org/example/test.xml"
. A path which references a URL (e.g., a path prefixed withclasspath:
,file:
,http:
, etc.) will be loaded using the specified resource protocol. Resource location wildcards (e.g.**/*.properties
) are not permitted: each location must evaluate to exactly one.properties
or.xml
resource. Property placeholders in paths (i.e.,${...}
) will be resolved against theEnvironment
.Default Properties File Detection
See the class-level Javadoc for a discussion on detection of defaults.
Precedence
Properties loaded from resource locations have lower precedence than inlined
properties()
.This attribute may not be used in conjunction with
value()
, but it may be used instead ofvalue()
.- See Also:
inheritLocations()
,value()
,properties()
,PropertySource
- Default:
- {}
inheritLocations
boolean inheritLocations
Whether or not test property sourcelocations()
from superclasses should be inherited.The default value is
true
, which means that a test class will inherit property source locations defined by a superclass. Specifically, the property source locations for a test class will be appended to the list of property source locations defined by a superclass. Thus, subclasses have the option of extending the list of test property source locations.If
inheritLocations
is set tofalse
, the property source locations for the test class will shadow and effectively replace any property source locations defined by a superclass.In the following example, the
ApplicationContext
forBaseTest
will be loaded using only the"base.properties"
file as a test property source. In contrast, theApplicationContext
forExtendedTest
will be loaded using the"base.properties"
and"extended.properties"
files as test property source locations.@TestPropertySource("base.properties") @ContextConfiguration public class BaseTest { // ... } @TestPropertySource("extended.properties") @ContextConfiguration public class ExtendedTest extends BaseTest { // ... }
- See Also:
locations()
- Default:
- true
properties
String[] properties
Inlined properties in the form of key-value pairs that should be added to the SpringEnvironment
before theApplicationContext
is loaded for the test. All key-value pairs will be added to the enclosingEnvironment
as a single testPropertySource
with the highest precedence.Supported Syntax
The supported syntax for key-value pairs is the same as the syntax defined for entries in a Java properties file:
"key=value"
"key:value"
"key value"
Precedence
Properties declared via this attribute have higher precedence than properties loaded from resource
locations()
.This attribute may be used in conjunction with
value()
orlocations()
.- See Also:
inheritProperties()
,locations()
,PropertySource
- Default:
- {}
inheritProperties
boolean inheritProperties
Whether or not inlined testproperties()
from superclasses should be inherited.The default value is
true
, which means that a test class will inherit inlined properties defined by a superclass. Specifically, the inlined properties for a test class will be appended to the list of inlined properties defined by a superclass. Thus, subclasses have the option of extending the list of inlined test properties.If
inheritProperties
is set tofalse
, the inlined properties for the test class will shadow and effectively replace any inlined properties defined by a superclass.In the following example, the
ApplicationContext
forBaseTest
will be loaded using only the inlinedkey1
property. In contrast, theApplicationContext
forExtendedTest
will be loaded using the inlinedkey1
andkey2
properties.@TestPropertySource(properties = "key1 = value1") @ContextConfiguration public class BaseTest { // ... } @TestPropertySource(properties = "key2 = value2") @ContextConfiguration public class ExtendedTest extends BaseTest { // ... }
- See Also:
properties()
- Default:
- true