-
Notifications
You must be signed in to change notification settings - Fork 37.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ignore duplicate config metadata for cache key in TestContext framework
Prior to this commit, if a developer accidentally copied and pasted the same @ContextConfiguration or @TestPropertySource declaration from a test class to one of its subclasses or nested test classes, the Spring TestContext Framework (TCF) would merge the inherited configuration with the local configuration, resulting in different sets of configuration metadata which in turn resulted in a different ApplicationContext instance being loaded for the test classes. This behavior led to unnecessary creation of identical application contexts in the context cache for the TCF stored under different keys. This commit ignores duplicate configuration metadata when generating the ApplicationContext cache key (i.e., MergedContextConfiguration) in the TCF. This is performed for the following annotations. - @ContextConfiguration - @activeprofiles (support already existed prior to this commit) - @TestPropertySource Specifically, if @ContextConfiguration or @TestPropertySource is declared on a test class and its subclass or nested test class with the exact same attributes, only one instance of the annotation will be used to generate the cache key for the resulting ApplicationContext. The exception to this rule is an "empty" annotation declaration. An empty @ContextConfiguration or @TestPropertySource declaration signals that Spring (or a third-party SmartContextLoader) should detect default configuration specific to the annotated class. Thus, multiple empty @ContextConfiguration or @TestPropertySource declarations within a test class hierarchy are not considered to be duplicate configuration and are therefore not ignored. Since @TestPropertySource is a @repeatable annotation, the same duplicate configuration detection logic is applied for multiple @TestPropertySource declarations on a single test class or test interface. In addition, this commit reinstates validation of the rules for repeated @TestPropertySource annotations that was removed when support for @NestedTestConfiguration was introduced. Closes gh-25800
- Loading branch information
Showing
6 changed files
with
430 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.