Add @AutoConfigureCache annotation

Add @AutoConfigureCache annotation to configure the specific cache
manager to use with a test. By default the NoOpCacheManager is used.

The @JsonTest, @DataJpaTest and @WebMvcTests have also been updated to
use the annotation.

Fixes gh-5765
pull/5836/merge
Phillip Webb 9 years ago
parent f51d9d3b99
commit 02bd3dc62d

@ -0,0 +1,48 @@
/*
* 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.core;
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.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
import org.springframework.boot.autoconfigure.cache.CacheType;
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
import org.springframework.cache.support.NoOpCacheManager;
/**
* Annotation that can be applied to a test class to enable and configure
* auto-configuration of caching. By default this annotation installs a
* {@link NoOpCacheManager}.
*
* @author Phillip Webb
* @since 1.4.0
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ImportAutoConfiguration(CacheAutoConfiguration.class)
public @interface AutoConfigureCache {
@PropertyMapping("spring.cache.type")
CacheType cacheProvider() default CacheType.NONE;
}

@ -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.
*/
/**
* Auto-configuration for core parts common to most Spring Boot applications.
*/
package org.springframework.boot.test.autoconfigure.core;

@ -25,6 +25,7 @@ import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache;
import org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters;
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
import org.springframework.boot.test.json.GsonTester;
@ -48,6 +49,7 @@ import org.springframework.test.context.BootstrapWith;
* @author Phillip Webb
* @see AutoConfigurationJson
* @see AutoConfigureJsonTesters
* @see AutoConfigureCache
* @since 1.4.0
*/
@Target(ElementType.TYPE)
@ -57,6 +59,7 @@ import org.springframework.test.context.BootstrapWith;
@BootstrapWith(SpringBootTestContextBootstrapper.class)
@OverrideAutoConfiguration(enabled = false)
@TypeExcludeFilters(JsonExcludeFilter.class)
@AutoConfigureCache
@AutoConfigurationJson
@AutoConfigureJsonTesters
public @interface JsonTest {

@ -25,6 +25,7 @@ import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache;
import org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters;
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
import org.springframework.boot.test.context.SpringBootTest;
@ -52,7 +53,10 @@ import org.springframework.transaction.annotation.Transactional;
* annotation.
*
* @author Phillip Webb
* @see AutoConfigureDataJpa
* @see AutoConfigureTestDatabase
* @see AutoConfigureTestEntityManager
* @see AutoConfigureCache
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ -62,6 +66,7 @@ import org.springframework.transaction.annotation.Transactional;
@OverrideAutoConfiguration(enabled = false)
@TypeExcludeFilters(DataJpaTypeExcludeFilter.class)
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager

@ -25,6 +25,7 @@ import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache;
import org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
@ -59,7 +60,9 @@ import org.springframework.test.web.servlet.MockMvc;
* {@link AutoConfigureMockMvc @AutoConfigureMockMvc} rather than this annotation.
*
* @author Phillip Webb
* @see AutoConfigureWebMvc
* @see AutoConfigureMockMvc
* @see AutoConfigureCache
* @since 1.4.0
*/
@Target(ElementType.TYPE)
@ -69,6 +72,7 @@ import org.springframework.test.web.servlet.MockMvc;
@BootstrapWith(WebMvcTestContextBootstrapper.class)
@OverrideAutoConfiguration(enabled = false)
@TypeExcludeFilters(WebMvcTypeExcludeFilter.class)
@AutoConfigureCache
@AutoConfigureWebMvc
@AutoConfigureMockMvc
public @interface WebMvcTest {

@ -0,0 +1,58 @@
/*
* 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.core;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.support.NoOpCacheManager;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link AutoConfigureCache}.
*
* @author Phillip Webb
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureCache
public class AutoConfigureCacheIntegrationTests {
@Autowired
private ApplicationContext applicationContext;
@Test
public void shouldConfigureNoOpCacheManager() throws Exception {
CacheManager bean = this.applicationContext.getBean(CacheManager.class);
assertThat(bean).isInstanceOf(NoOpCacheManager.class);
}
@Configuration
@EnableCaching
public static class Config {
}
}
Loading…
Cancel
Save