diff --git a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestDatabaseAutoConfiguration.java b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestDatabaseAutoConfiguration.java index aa3ce107e7..3805ed1401 100644 --- a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestDatabaseAutoConfiguration.java +++ b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestDatabaseAutoConfiguration.java @@ -100,10 +100,12 @@ public class TestDatabaseAutoConfiguration { private void process(BeanDefinitionRegistry registry, ConfigurableListableBeanFactory beanFactory) { BeanDefinitionHolder holder = getDataSourceBeanDefinition(beanFactory); - logger.info("Replacing '" + holder.getBeanName() - + "' DataSource bean with embedded version"); - registry.registerBeanDefinition(holder.getBeanName(), - createEmbeddedBeanDefinition()); + if (holder != null) { + logger.info("Replacing '" + holder.getBeanName() + + "' DataSource bean with embedded version"); + registry.registerBeanDefinition(holder.getBeanName(), + createEmbeddedBeanDefinition()); + } } private BeanDefinition createEmbeddedBeanDefinition() { @@ -113,24 +115,23 @@ public class TestDatabaseAutoConfiguration { private BeanDefinitionHolder getDataSourceBeanDefinition( ConfigurableListableBeanFactory beanFactory) { String[] beanNames = beanFactory.getBeanNamesForType(DataSource.class); - if (!ObjectUtils.isEmpty(beanNames)) { - if (beanNames.length == 1) { - String beanName = beanNames[0]; - BeanDefinition beanDefinition = beanFactory - .getBeanDefinition(beanName); + if (ObjectUtils.isEmpty(beanNames)) { + logger.warn("No DataSource beans found, " + + "embedded version will not be used"); + } + if (beanNames.length == 1) { + String beanName = beanNames[0]; + BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); + return new BeanDefinitionHolder(beanDefinition, beanName); + } + for (String beanName : beanNames) { + BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); + if (beanDefinition.isPrimary()) { return new BeanDefinitionHolder(beanDefinition, beanName); } - for (String beanName : beanNames) { - BeanDefinition beanDefinition = beanFactory - .getBeanDefinition(beanName); - if (beanDefinition.isPrimary()) { - return new BeanDefinitionHolder(beanDefinition, beanName); - } - logger.warn("No primary DataSource found, " - + "embedded version will not be used"); - } - } + logger.warn("No primary DataSource found, " + + "embedded version will not be used"); return null; } diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/orm/jpa/AutoConfigureTestDatabaseWithNoDatabaseIntegrationTests.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/orm/jpa/AutoConfigureTestDatabaseWithNoDatabaseIntegrationTests.java new file mode 100644 index 0000000000..ee1cd687ca --- /dev/null +++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/orm/jpa/AutoConfigureTestDatabaseWithNoDatabaseIntegrationTests.java @@ -0,0 +1,52 @@ +/* + * 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.orm.jpa; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link AutoConfigureTestDatabase} when there is no database. + * + * @author Phillip Webb + */ +@RunWith(SpringRunner.class) +@AutoConfigureTestDatabase +public class AutoConfigureTestDatabaseWithNoDatabaseIntegrationTests { + + @Autowired + private ApplicationContext context; + + @Test + public void testContextLoades() throws Exception { + // gh-6897 + assertThat(this.context).isNotNull(); + } + + @SpringBootConfiguration + static class Config { + + } + +}