Browse Source
Add a new test module to deal with auto-configuration in tests. See gh-4901pull/5488/head
14 changed files with 482 additions and 0 deletions
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-parent</artifactId> |
||||
<version>1.4.0.BUILD-SNAPSHOT</version> |
||||
<relativePath>../spring-boot-parent</relativePath> |
||||
</parent> |
||||
<artifactId>spring-boot-test-autoconfigure</artifactId> |
||||
<name>Spring Boot Test Auto-Configure</name> |
||||
<description>Spring Boot Test Auto-Configure</description> |
||||
<url>http://projects.spring.io/spring-boot/</url> |
||||
<organization> |
||||
<name>Pivotal Software, Inc.</name> |
||||
<url>http://www.spring.io</url> |
||||
</organization> |
||||
<properties> |
||||
<main.basedir>${basedir}/..</main.basedir> |
||||
</properties> |
||||
<dependencies> |
||||
<!-- Compile --> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-test</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-autoconfigure</artifactId> |
||||
</dependency> |
||||
<!-- Optional --> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-test</artifactId> |
||||
<optional>true</optional> |
||||
</dependency> |
||||
<!-- Test --> |
||||
<dependency> |
||||
<groupId>org.aspectj</groupId> |
||||
<artifactId>aspectjrt</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.aspectj</groupId> |
||||
<artifactId>aspectjweaver</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>ch.qos.logback</groupId> |
||||
<artifactId>logback-classic</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
||||
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import java.lang.annotation.Documented; |
||||
import java.lang.annotation.ElementType; |
||||
import java.lang.annotation.Retention; |
||||
import java.lang.annotation.RetentionPolicy; |
||||
import java.lang.annotation.Target; |
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration; |
||||
|
||||
/** |
||||
* Annotation that can be used to override |
||||
* {@link EnableAutoConfiguration @EnableAutoConfiguration}. Often used in combination |
||||
* with {@link ImportAutoConfiguration} to limit the auto-configutation classes that are |
||||
* loaded. |
||||
* |
||||
* @author Phillip Webb |
||||
* @since 1.4.0 |
||||
* @see EnableAutoConfiguration#ENABLED_OVERRIDE_PROPERTY |
||||
*/ |
||||
@Target(ElementType.TYPE) |
||||
@Retention(RetentionPolicy.RUNTIME) |
||||
@Documented |
||||
public @interface OverrideAutoConfiguration { |
||||
|
||||
/** |
||||
* The value of the {@link EnableAutoConfiguration#ENABLED_OVERRIDE_PROPERTY enabled |
||||
* property override}. |
||||
*/ |
||||
boolean enabled(); |
||||
|
||||
} |
||||
@ -0,0 +1,75 @@
@@ -0,0 +1,75 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import java.util.List; |
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.test.util.EnvironmentTestUtils; |
||||
import org.springframework.context.ConfigurableApplicationContext; |
||||
import org.springframework.core.annotation.AnnotatedElementUtils; |
||||
import org.springframework.test.context.ContextConfigurationAttributes; |
||||
import org.springframework.test.context.ContextCustomizer; |
||||
import org.springframework.test.context.ContextCustomizerFactory; |
||||
import org.springframework.test.context.MergedContextConfiguration; |
||||
|
||||
/** |
||||
* {@link ContextCustomizerFactory} to support |
||||
* {@link OverrideAutoConfiguration @OverrideAutoConfiguration}. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
class OverrideAutoConfigurationContextCustomizerFactory |
||||
implements ContextCustomizerFactory { |
||||
|
||||
@Override |
||||
public ContextCustomizer createContextCustomizer(Class<?> testClass, |
||||
List<ContextConfigurationAttributes> configurationAttributes) { |
||||
OverrideAutoConfiguration annotation = AnnotatedElementUtils |
||||
.findMergedAnnotation(testClass, OverrideAutoConfiguration.class); |
||||
if (annotation != null && !annotation.enabled()) { |
||||
return new DisableAutoConfigurationContextCustomizer(); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* {@link ContextCustomizer} to disable full auto-configuration. |
||||
*/ |
||||
private static class DisableAutoConfigurationContextCustomizer |
||||
implements ContextCustomizer { |
||||
|
||||
@Override |
||||
public void customizeContext(ConfigurableApplicationContext context, |
||||
MergedContextConfiguration mergedConfig) { |
||||
EnvironmentTestUtils.addEnvironment(context, |
||||
EnableAutoConfiguration.ENABLED_OVERRIDE_PROPERTY + "=false"); |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
return getClass().hashCode(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean equals(Object obj) { |
||||
return (obj != null && obj.getClass() == getClass()); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/* |
||||
* Copyright 2012-2016 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. |
||||
*/ |
||||
|
||||
/** |
||||
* Test auto-configuration support. |
||||
*/ |
||||
package org.springframework.boot.test.autoconfigure; |
||||
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
# Spring Test ContextCustomizerFactories |
||||
org.springframework.test.context.ContextCustomizerFactory=\ |
||||
org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory |
||||
|
||||
# Test Execution Listeners |
||||
org.springframework.test.context.TestExecutionListener=\ |
||||
org.springframework.boot.test.autoconfigure.AutoConfigureReportTestExecutionListener |
||||
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import org.springframework.boot.SpringBootConfiguration; |
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
/** |
||||
* Example {@link SpringBootApplication @SpringBootApplication} for use with |
||||
* {@link OverrideAutoConfiguration} tests. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
@SpringBootConfiguration |
||||
@EnableAutoConfiguration |
||||
public class ExampleSpringBootApplication { |
||||
|
||||
} |
||||
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import org.springframework.boot.test.context.TestConfiguration; |
||||
|
||||
/** |
||||
* Example {@link TestConfiguration @TestConfiguration} for |
||||
* {@link OverrideAutoConfiguration} tests. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
@TestConfiguration |
||||
public class ExampleTestConfig { |
||||
|
||||
} |
||||
@ -0,0 +1,87 @@
@@ -0,0 +1,87 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import org.junit.Test; |
||||
|
||||
import org.springframework.test.context.ContextCustomizer; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link OverrideAutoConfigurationContextCustomizerFactory}. |
||||
* |
||||
* @author pwebb |
||||
*/ |
||||
public class OverrideAutoConfigurationContextCustomizerFactoryTests { |
||||
|
||||
private OverrideAutoConfigurationContextCustomizerFactory factory = new OverrideAutoConfigurationContextCustomizerFactory(); |
||||
|
||||
@Test |
||||
public void getContextCustomizerWhenHasNoAnnotationShouldReturnNull() |
||||
throws Exception { |
||||
ContextCustomizer customizer = this.factory |
||||
.createContextCustomizer(NoAnnotation.class, null); |
||||
assertThat(customizer).isNull(); |
||||
} |
||||
|
||||
@Test |
||||
public void getContextCustomizerWhenHasAnnotationEnabledTrueShouldReturnNull() |
||||
throws Exception { |
||||
ContextCustomizer customizer = this.factory |
||||
.createContextCustomizer(WithAnnotationEnabledTrue.class, null); |
||||
assertThat(customizer).isNull(); |
||||
} |
||||
|
||||
@Test |
||||
public void getContextCustomizerWhenHasAnnotationEnabledFalseShouldReturnCustomizer() |
||||
throws Exception { |
||||
ContextCustomizer customizer = this.factory |
||||
.createContextCustomizer(WithAnnotationEnabledFalse.class, null); |
||||
assertThat(customizer).isNotNull(); |
||||
} |
||||
|
||||
@Test |
||||
public void hashCodeAndEquals() throws Exception { |
||||
ContextCustomizer customizer1 = this.factory |
||||
.createContextCustomizer(WithAnnotationEnabledFalse.class, null); |
||||
ContextCustomizer customizer2 = this.factory |
||||
.createContextCustomizer(WithSameAnnotation.class, null); |
||||
assertThat(customizer1.hashCode()).isEqualTo(customizer2.hashCode()); |
||||
assertThat(customizer1).isEqualTo(customizer1).isEqualTo(customizer2); |
||||
} |
||||
|
||||
static class NoAnnotation { |
||||
|
||||
} |
||||
|
||||
@OverrideAutoConfiguration(enabled = true) |
||||
static class WithAnnotationEnabledTrue { |
||||
|
||||
} |
||||
|
||||
@OverrideAutoConfiguration(enabled = false) |
||||
static class WithAnnotationEnabledFalse { |
||||
|
||||
} |
||||
|
||||
@OverrideAutoConfiguration(enabled = false) |
||||
static class WithSameAnnotation { |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import org.junit.Rule; |
||||
import org.junit.Test; |
||||
import org.junit.rules.ExpectedException; |
||||
import org.junit.runner.RunWith; |
||||
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration; |
||||
import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor; |
||||
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper; |
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.test.context.BootstrapWith; |
||||
import org.springframework.test.context.junit4.SpringRunner; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Integration tests for {@link OverrideAutoConfiguration} when {@code enabled} is |
||||
* {@code false}. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
@RunWith(SpringRunner.class) |
||||
@OverrideAutoConfiguration(enabled = false) |
||||
@BootstrapWith(SpringBootTestContextBootstrapper.class) |
||||
@ImportAutoConfiguration(ExampleTestConfig.class) |
||||
public class OverrideAutoConfigurationEnabledFalseIntegrationTest { |
||||
|
||||
@Rule |
||||
public ExpectedException thrown = ExpectedException.none(); |
||||
|
||||
@Autowired |
||||
private ApplicationContext context; |
||||
|
||||
@Test |
||||
public void disabledAutoConfiguration() throws Exception { |
||||
ApplicationContext context = this.context; |
||||
assertThat(context.getBean(ExampleTestConfig.class)).isNotNull(); |
||||
this.thrown.expect(NoSuchBeanDefinitionException.class); |
||||
context.getBean(ConfigurationPropertiesBindingPostProcessor.class); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
/* |
||||
* Copyright 2012-2016 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.boot.test.autoconfigure; |
||||
|
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration; |
||||
import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor; |
||||
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper; |
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.test.context.BootstrapWith; |
||||
import org.springframework.test.context.junit4.SpringRunner; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Integration tests for {@link OverrideAutoConfiguration} when {@code enabled} is |
||||
* {@code true}. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
@RunWith(SpringRunner.class) |
||||
@OverrideAutoConfiguration(enabled = true) |
||||
@BootstrapWith(SpringBootTestContextBootstrapper.class) |
||||
@ImportAutoConfiguration(ExampleTestConfig.class) |
||||
public class OverrideAutoConfigurationEnabledTrueIntegrationTest { |
||||
|
||||
@Autowired |
||||
private ApplicationContext context; |
||||
|
||||
@Test |
||||
public void autoconfiguredContext() throws Exception { |
||||
ApplicationContext context = this.context; |
||||
assertThat(context.getBean(ExampleSpringBootApplication.class)).isNotNull(); |
||||
assertThat(context.getBean(ConfigurationPropertiesBindingPostProcessor.class)) |
||||
.isNotNull(); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue