diff --git a/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizer.java b/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizer.java index 5cf453bd66..4b4d00dbd6 100644 --- a/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizer.java +++ b/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 the original author or authors. + * Copyright 2017-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,6 +54,7 @@ class MockIntegrationContextCustomizer implements ContextCustomizer { new RootBeanDefinition(MockIntegrationContext.class)); String endpointsInitializer = Introspector.decapitalize(IntegrationEndpointsInitializer.class.getSimpleName()); + registry.registerBeanDefinition(endpointsInitializer, BeanDefinitionBuilder.genericBeanDefinition(IntegrationEndpointsInitializer.class) .addConstructorArgValue(this.springIntegrationTest) @@ -61,5 +62,20 @@ class MockIntegrationContextCustomizer implements ContextCustomizer { } + @Override + public int hashCode() { + return this.springIntegrationTest.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == null || obj.getClass() != getClass()) { + return false; + } + + MockIntegrationContextCustomizer customizer = (MockIntegrationContextCustomizer) obj; + return this.springIntegrationTest.equals(customizer.springIntegrationTest); + } + } diff --git a/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizerFactory.java b/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizerFactory.java index 21b18b5d08..3193337256 100644 --- a/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizerFactory.java +++ b/spring-integration-test/src/main/java/org/springframework/integration/test/context/MockIntegrationContextCustomizerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 the original author or authors. + * Copyright 2017-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,11 +37,12 @@ class MockIntegrationContextCustomizerFactory implements ContextCustomizerFactor @Override public ContextCustomizer createContextCustomizer(Class testClass, List configAttributes) { + SpringIntegrationTest springIntegrationTest = AnnotatedElementUtils.findMergedAnnotation(testClass, SpringIntegrationTest.class); + return springIntegrationTest != null - ? - new MockIntegrationContextCustomizer(springIntegrationTest) + ? new MockIntegrationContextCustomizer(springIntegrationTest) : null; } diff --git a/spring-integration-test/src/test/java/org/springframework/integration/test/mock/CachedSpringIntegrationTestAnnotationTests.java b/spring-integration-test/src/test/java/org/springframework/integration/test/mock/CachedSpringIntegrationTestAnnotationTests.java new file mode 100644 index 0000000000..039ef7265c --- /dev/null +++ b/spring-integration-test/src/test/java/org/springframework/integration/test/mock/CachedSpringIntegrationTestAnnotationTests.java @@ -0,0 +1,70 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.test.mock; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.integration.test.context.SpringIntegrationTest; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +/** + * @author Artem Bilan + * + * @since 5.0.9 + */ +@SpringJUnitConfig +@SpringIntegrationTest +public abstract class CachedSpringIntegrationTestAnnotationTests { + + private static int beanFactoryPostProcessorCallCounter; + + public static class SpringIntegrationTestAnnotationCaching1Tests + extends CachedSpringIntegrationTestAnnotationTests { + + @Test + public void testSingleApplicationContext() { + assertThat(beanFactoryPostProcessorCallCounter).isEqualTo(1); + } + + } + + public static class SpringIntegrationTestAnnotationCaching2Tests + extends CachedSpringIntegrationTestAnnotationTests { + + @Test + public void testSingleApplicationContext() { + assertThat(beanFactoryPostProcessorCallCounter).isEqualTo(1); + } + + } + + @Configuration + public static class ContextConfiguration { + + @Bean + public static BeanFactoryPostProcessor tesBeanFactoryPostProcessor() { + return beanFactory -> beanFactoryPostProcessorCallCounter++; + } + + } + +} diff --git a/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java b/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java index b98a6460e7..bf01956722 100644 --- a/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java +++ b/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java @@ -62,6 +62,7 @@ import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.SubscribableChannel; import org.springframework.messaging.support.GenericMessage; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -74,6 +75,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @ContextConfiguration(classes = MockMessageHandlerTests.Config.class) @SpringIntegrationTest +@DirtiesContext public class MockMessageHandlerTests { @Autowired