- 08 7月, 2016 1 次提交
-
-
由 Sam Brannen 提交于
Issue: SPR-14432
-
- 07 7月, 2016 1 次提交
-
-
由 Juergen Hoeller 提交于
-
- 05 7月, 2016 2 次提交
-
-
由 Stephane Nicoll 提交于
Issue: SPR-13188
-
由 Juergen Hoeller 提交于
This commit also fixes broken javadoc links and code references. Issue: SPR-13188
-
- 07 6月, 2016 1 次提交
-
-
由 Juergen Hoeller 提交于
-
- 07 4月, 2016 1 次提交
-
-
由 Sam Brannen 提交于
This commit introduces a new method in TestPropertySourceUtils that allows properties files to be added directly to the environment without the need for a ConfigurableApplicationContext upfront; however, a ResourceLoader is still necessary. Issue: SPR-14131
-
- 05 4月, 2016 1 次提交
-
-
由 Juergen Hoeller 提交于
-
- 28 3月, 2016 1 次提交
-
-
由 Sam Brannen 提交于
-
- 26 3月, 2016 1 次提交
-
-
由 Phillip Webb 提交于
Update methods in TestPropertySourceUtils to accept var-args and allow addInlinedProperties to be called more than once. Issue: SPR-14088
-
- 24 3月, 2016 1 次提交
-
-
由 Juergen Hoeller 提交于
Issue: SPR-13440
-
- 12 3月, 2016 2 次提交
-
-
由 Sam Brannen 提交于
Issue: SPR-13998
-
由 Phillip Webb 提交于
Allow third-parties to contribute ContextCustomizers that can customize ApplicationContexts created by the Spring TestContext Framework (TCF) before they are refreshed. A customizer may be provided via a ContextCustomizerFactory which is registered with `spring.factories`. Each factory is consulted whenever a new ApplicationContext needs to be created by the TCF. Factories may inspect various details about the test and either return a new ContextCustomizer or null. ContextCustomizers are similar to ApplicationContextInitializers and may perform any number of tasks, including bean registration, setting of active profiles, etc. Issue: SPR-13998
-
- 09 3月, 2016 1 次提交
-
-
由 Phillip Webb 提交于
Prior to this commit, the @ContextConfiguration annotation was required to be present even if default XML files, Groovy scripts, or @Configuration classes were detected; however, in such cases the @ContextConfiguration was typically declared empty and therefore seemingly unnecessary boilerplate. This commit permits @ContextConfiguration to be omitted whenever it can be reasonably deduced. Consequently, integration tests such as the following are now supported. @RunWith(SpringRunner.class) public class MyTest { @Autowired String myBean; @test public void example() { /* ... */ } @Configuration static class Config { @Bean String myBean() { return "Hello"; } } } Issue: SPR-13955
-
- 08 3月, 2016 1 次提交
-
-
由 Sam Brannen 提交于
-
- 25 2月, 2016 1 次提交
-
-
由 Juergen Hoeller 提交于
-
- 08 12月, 2015 1 次提交
-
-
由 Juergen Hoeller 提交于
-
- 02 7月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
SPR-12429 introduced various `BEFORE_*` modes in `@DirtiesContext`. To support these new modes, `DirtiesContextTestExecutionListener` (DCTEL) was updated to support both `BEFORE_*` and `AFTER_*` modes. However, there is a problem with having DCTEL support `BEFORE_*` modes since it is typically configured to execute after the `DependencyInjectionTestExecutionListener` (DITEL), and this leads to several undesired side effects: - The test's `ApplicationContext` is closed by DCTEL *after* dependencies have been injected into the test instance. - Injected dependencies may therefore attempt to interact with an `ApplicationContext` that is no longer _active_. - If a test has its `ApplicationContext` injected as a dependency, interaction with the context will likely fail since the context has been closed. - Any `TestExecutionListeners` registered after DCTEL will get a _new_ `ApplicationContext` if they invoke `getApplicationContext()` on the `TestContext`. This commit fixes these issues by introducing a new `DirtiesContextBeforeModesTestExecutionListener` (DCBMTEL) that is registered by default before DITEL. The previous support for `BEFORE_*` modes has been moved from DCTEL to DCBMTEL. In addition, an `AbstractDirtiesContextTestExecutionListener` has been extracted from DCTEL in order to avoid code duplication. Issue: SPR-13180
-
- 15 6月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
Ever since @ActiveProfiles was introduced, the declared active profiles for integration tests have been sorted in order to support unique cache key generation; however, there are use cases for which the original ordering should be retained. For example, Spring Boot's ConfigFileApplicationListener loads configuration files for active profiles in the order returned by Environment.getActiveProfiles(), with the assumption that the ordering matches the order in which the developer declared the active profiles. This commit maintains the uniqueness of active profiles declared via @ActiveProfiles but no longer sorts them. Issue: SPR-12492
-
- 14 6月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
In AnnotatedElementUtils, all methods pertaining to merging annotation attributes have been renamed to "getMerged*()" and "findMerged*()" accordingly. Existing methods such as getAnnotationAttributes(..) have been deprecated in favor of the more descriptive "merged" variants. This aligns the naming conventions in AnnotatedElementUtils with those already present in AnnotationReadingVisitorUtils. The use of "annotationType" as a variable name for the fully qualified class name of an annotation type has been replaced with "annotationName" in order to improve the readability and intent of the code base. In MetaAnnotationUtils.AnnotationDescriptor, getMergedAnnotation() has been renamed to synthesizeAnnotation(), and the method is now overridden in UntypedAnnotationDescriptor to always throw an UnsupportedOperationException in order to avoid potential run-time ClassCastExceptions. Issue: SPR-11511
-
- 29 5月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
Spring Framework 4.2 RC1 introduced support for synthesizing an annotation from an existing annotation in order to provide additional functionality above and beyond that provided by Java. Specifically, such synthesized annotations provide support for @AliasFor semantics. As luck would have it, the same principle can be used to synthesize an annotation from any map of attributes, and in particular, from an instance of AnnotationAttributes. The following highlight the major changes in this commit toward achieving this goal. - Introduced AnnotationAttributeExtractor abstraction and refactored SynthesizedAnnotationInvocationHandler to delegate to an AnnotationAttributeExtractor. - Extracted code from SynthesizedAnnotationInvocationHandler into new AbstractAliasAwareAnnotationAttributeExtractor and DefaultAnnotationAttributeExtractor implementation classes. - Introduced MapAnnotationAttributeExtractor for synthesizing an annotation that is backed by a map or AnnotationAttributes instance. - Introduced a variant of synthesizeAnnotation() in AnnotationUtils that accepts a map. - Introduced findAnnotation(*) methods in AnnotatedElementUtils that synthesize merged AnnotationAttributes back into an annotation of the target type. The following classes have been refactored to use the new support for synthesizing AnnotationAttributes back into an annotation. - ApplicationListenerMethodAdapter - TestAnnotationUtils - AbstractTestContextBootstrapper - ActiveProfilesUtils - ContextLoaderUtils - DefaultActiveProfilesResolver - DirtiesContextTestExecutionListener - TestPropertySourceAttributes - TestPropertySourceUtils - TransactionalTestExecutionListener - MetaAnnotationUtils - MvcUriComponentsBuilder - RequestMappingHandlerMapping In addition, this commit also includes changes to ensure that arrays returned by synthesized annotations are properly cloned first. Issue: SPR-13067
-
- 22 5月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
This commit introduces first-class support for aliases for annotation attributes. Specifically, this commit introduces a new @AliasFor annotation that can be used to declare a pair of aliased attributes within a single annotation or an alias from an attribute in a custom composed annotation to an attribute in a meta-annotation. To support @AliasFor within annotation instances, AnnotationUtils has been overhauled to "synthesize" any annotations returned by "get" and "find" searches. A SynthesizedAnnotation is an annotation that is wrapped in a JDK dynamic proxy which provides run-time support for @AliasFor semantics. SynthesizedAnnotationInvocationHandler is the actual handler behind the proxy. In addition, the contract for @AliasFor is fully validated, and an AnnotationConfigurationException is thrown in case invalid configuration is detected. For example, @ContextConfiguration from the spring-test module is now declared as follows: public @interface ContextConfiguration { @AliasFor(attribute = "locations") String[] value() default {}; @AliasFor(attribute = "value") String[] locations() default {}; // ... } The following annotations and their related support classes have been modified to use @AliasFor. - @ManagedResource - @ContextConfiguration - @ActiveProfiles - @TestExecutionListeners - @TestPropertySource - @Sql - @ControllerAdvice - @RequestMapping Similarly, support for AnnotationAttributes has been reworked to support @AliasFor as well. This allows for fine-grained control over exactly which attributes are overridden within an annotation hierarchy. In fact, it is now possible to declare an alias for the 'value' attribute of a meta-annotation. For example, given the revised declaration of @ContextConfiguration above, one can now develop a composed annotation with a custom attribute override as follows. @ContextConfiguration public @interface MyTestConfig { @AliasFor( annotation = ContextConfiguration.class, attribute = "locations" ) String[] xmlFiles(); // ... } Consequently, the following are functionally equivalent. - @MyTestConfig(xmlFiles = "test.xml") - @ContextConfiguration("test.xml") - @ContextConfiguration(locations = "test.xml"). Issue: SPR-11512, SPR-11513
-
- 20 5月, 2015 1 次提交
-
-
由 Juergen Hoeller 提交于
Issue: SPR-12926
-
- 19 5月, 2015 1 次提交
-
-
由 Stephane Nicoll 提交于
Remove unused imports
-
- 14 5月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
This commit updates code that previously used getAnnotationAttributes() in AnnotatedElementUtils to use findAnnotationAttributes(), where appropriate. Issue: SPR-12738
-
- 21 4月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
Since the ContextCache is now a published SPI, it and its collaborators have been moved to a dedicated 'org.sfw.test.context.cache' subpackage. Issue: SPR-12683
-
- 20 4月, 2015 4 次提交
-
-
由 Sam Brannen 提交于
This commit adds an assertion to DefaultTestContext's getApplicationContext() method to ensure that a context loaded by the Spring TestContext Framework (TCF) or retrieved from the ContextCache is still active. This extra check helps to avoid situations where developers manually close a cached context instead of relying on the @DirtiesContext support. Issue: SPR-12932
-
由 Sam Brannen 提交于
The changes made in 0cb22fc8 would result in contexts not being properly closed if evicted from the ConcurrentReferenceHashMap by the Garbage Collector. This commit reverts those changes and returns to using standard ConcurrentHashMaps for the time being. Issue: SPR-7687
-
由 Sam Brannen 提交于
- DefaultBootstrapContext and DefaultCacheAwareContextLoaderDelegate are now public classes in the 'support' subpackage. - Introduced getCacheAwareContextLoaderDelegate() in AbstractTestContextBootstrapper as an extension point for configuring custom ContextCache support. - Introduced reflection-based createBootstrapContext() utility method in BootstrapUtils; TestContextManager now delegates to BootstrapUtils in order to avoid package cycles. - Introduced logStatistics() method in the ContextCache API and defined statistics logging category as a constant. - DefaultCacheAwareContextLoaderDelegate now delegates to ContextCache.logStatistics(). Issue: SPR-12683
-
由 Sam Brannen 提交于
- ContextCache is now a public interface. - Introduced public DefaultContextCache implementation in the 'support' subpackage. Issue: SPR-12683
-
- 19 4月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
This commit moves the responsibility of building a TestContext from the TestContextManager to a TestContextBootstrapper. In addition, DefaultTestContext is now a public class residing in the "support" subpackage. Issue: SPR-12683
-
- 15 4月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
This commit increases the extensibility of AbstractTestContextBootstrapper by making the resolveContextLoader() and resolveExplicitContextLoaderClass() methods protected instead of private. Furthermore, resolveContextLoader() now throws an IllegalStateException if getDefaultContextLoaderClass() returns null. Issue: SPR-12682
-
- 23 3月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
Prior to this commit, @DirtiesContext could only be used to close a test ApplicationContext after an entire test class or after a test method; however, there are some use cases for which it would be beneficial to close a test ApplicationContext before a given test class or test method -- for example, if some rogue (i.e., yet to be determined) test within a large test suite has corrupted the original configuration for the ApplicationContext. This commit provides a solution to such testing challenges by introducing the following modes for @DirtiesContext. - MethodMode.BEFORE_METHOD: configured via the new methodMode attribute - ClassMode.BEFORE_CLASS and ClassMode.BEFORE_EACH_TEST_METHOD: both configured via the existing classMode attribute Issue: SPR-12429
-
- 01 3月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
This commit simplifies the implementations of loadBeanDefinitions() in GenericGroovyXmlContextLoader and GenericGroovyXmlWebContextLoader. Due to the recent bug fix for GroovyBeanDefinitionReader regarding full support for XML config files, these Groovy context loaders can now simply use a GroovyBeanDefinitionReader instead of a GroovyBeanDefinitionReader plus an XmlBeanDefinitionReader. Issue: SPR-12769
-
- 18 2月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
- Added assertions for pre-conditions on method arguments for all public utility methods. - Introduced additional tests in TestPropertySourceUtilsTests to verify the new pre-conditions. - Introduced INLINED_PROPERTIES_PROPERTY_SOURCE_NAME constant for the name of the MapPropertySource created from inlined properties; the name therefore no longer contains the inlined properties, but the original values of the inlined properties can now be logged at debug level. - Simplified tests in InlinedPropertiesTestPropertySourceTests. Issue: SPR-12721
-
- 17 2月, 2015 2 次提交
-
-
由 Sam Brannen 提交于
Spring Framework 4.1 introduced support for @TestPropertySource; however, the utilities used to parse inlined properties and add test property sources to the environment are currently private which prevents reuse by third-party frameworks like Spring Boot. This commit addresses this issue by making such utilities public. - TestPropertySourceUtils is now a public class. - Various utility methods in TestPropertySourceUtils have been made public. - addResourcePropertySourcesToEnvironment() has been renamed to addPropertiesFilesToEnvironment(). - extractEnvironmentProperties() has been renamed to convertInlinedPropertiesToMap(). - All public methods in TestPropertySourceUtils are now fully documented. Issue: SPR-12721
-
由 Sam Brannen 提交于
The initial implementation for adding inlined properties configured via @TestPropertySource to the context's environment did not preserve the order in which the properties were physically declared. This makes @TestPropertySource a poor testing facility for mimicking the production environment's configuration if the property source mechanism used in production preserves ordering of property names -- which is the case for YAML-based property sources used in Spring Boot, Spring Yarn, etc. This commit addresses this issue by ensuring that the ordering of inlined properties declared via @TestPropertySource is preserved. Specifically, the original functionality has been refactored. extracted from AbstractContextLoader, and moved to TestPropertySourceUtils where it may later be made public for general purpose use in other frameworks. Issue: SPR-12710
-
- 24 1月, 2015 2 次提交
-
-
由 Sam Brannen 提交于
Spring Framework 4.0 introduced support for using test-related annotations as meta-annotations in the Spring TestContext Framework (TCF) in order to create custom composed annotations within a test suite; however, the detection of default @Configuration classes in test classes was not updated to search for @Configuration declared as a meta-annotation. Specifically, AnnotationConfigContextLoaderUtils invokes Class.isAnnotated() which only searches for annotations declared directly on the class in question. This commit addresses this issue by refactoring the isDefaultConfigurationClassCandidate() method in AnnotationConfigContextLoaderUtils so that it uses AnnotationUtils.findAnnotation() instead of Class.isAnnotated() for detecting the presence of the @Configuration annotation, either directly or as a meta-annotation. Issue: SPR-12659
-
由 Sam Brannen 提交于
Various parts of the reference manual as well as the Javadoc for AnnotationConfigContextLoaderUtils improperly refer to "static inner classes" even though this terminology does not exist in Java. The Java Language Specification explicitly refers to such classes as "static nested classes." An "inner class" must be non-static by definition.
-
- 11 1月, 2015 1 次提交
-
-
由 Sam Brannen 提交于
In order to allow DefaultActiveProfilesResolver to be reused (e.g., via extension or delegation), the check which asserts that the 'resolver' attribute of @ActiveProfiles is not set to a customer resolver class has been removed. Issue: SPR-12611
-
- 21 10月, 2014 1 次提交
-
-
由 Juergen Hoeller 提交于
-