From 3d2bde7156d61e9eb3257bd9d13c3d0f6f06fa63 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sat, 21 Mar 2015 00:39:54 +0100 Subject: [PATCH] Add tests that use the new generate-name attribute This commit updates the Spr8849Tests test suite to include XML configuration that guarantees that a unique database name is always automatically generated (via the new 'generate-name' attribute that was introduced in SPR-8849) while reusing the same bean name (i.e., 'dataSource'). Issue: SPR-8849 --- .../context/junit4/spr8849/Spr8849Tests.java | 9 ++- .../context/junit4/spr8849/TestClass3.java | 58 +++++++++++++++++++ .../context/junit4/spr8849/TestClass4.java | 58 +++++++++++++++++++ ...rce-config-with-auto-generated-db-name.xml | 12 ++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java create mode 100644 spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java create mode 100644 spring-test/src/test/resources/org/springframework/test/context/junit4/spr8849/datasource-config-with-auto-generated-db-name.xml diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/Spr8849Tests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/Spr8849Tests.java index efa9dd7942..9e218e1cd8 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/Spr8849Tests.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/Spr8849Tests.java @@ -24,6 +24,7 @@ import org.junit.runners.Suite.SuiteClasses; * Test suite to investigate claims raised in * SPR-8849. * + *

Work Around

*

By using a SpEL expression to generate a random {@code database-name} * for the embedded database (see {@code datasource-config.xml}), we ensure * that each {@code ApplicationContext} that imports the common configuration @@ -33,12 +34,18 @@ import org.junit.runners.Suite.SuiteClasses; * of the {@code database-name} attribute of the embedded database in * {@code datasource-config.xml} and run this suite. * + *

Solution

+ *

As of Spring 4.2, a proper solution is possible thanks to SPR-8849. + * {@link TestClass3} and {@link TestClass4} both import + * {@code datasource-config-with-auto-generated-db-name.xml} which makes + * use of the new {@code generate-name} attribute of {@code }. + * * @author Sam Brannen * @since 3.2 */ @SuppressWarnings("javadoc") @RunWith(Suite.class) -@SuiteClasses({ TestClass1.class, TestClass2.class }) +@SuiteClasses({ TestClass1.class, TestClass2.class, TestClass3.class, TestClass4.class }) public class Spr8849Tests { } diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java new file mode 100644 index 0000000000..c6f7a7ecd9 --- /dev/null +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java @@ -0,0 +1,58 @@ +/* + * Copyright 2002-2015 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.test.context.junit4.spr8849; + +import javax.annotation.Resource; +import javax.sql.DataSource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.*; + +/** + * This name of this class intentionally does not end with "Test" or "Tests" + * since it should only be run as part of the test suite: {@link Spr8849Tests}. + * + * @author Sam Brannen + * @since 4.2 + * @see Spr8849Tests + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class TestClass3 { + + @Configuration + @ImportResource("classpath:/org/springframework/test/context/junit4/spr8849/datasource-config-with-auto-generated-db-name.xml") + static class Config { + } + + + @Resource + DataSource dataSource; + + + @Test + public void dummyTest() { + assertNotNull(dataSource); + } + +} \ No newline at end of file diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java new file mode 100644 index 0000000000..d16a7d0e4d --- /dev/null +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java @@ -0,0 +1,58 @@ +/* + * Copyright 2002-2015 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.test.context.junit4.spr8849; + +import javax.annotation.Resource; +import javax.sql.DataSource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.*; + +/** + * This name of this class intentionally does not end with "Test" or "Tests" + * since it should only be run as part of the test suite: {@link Spr8849Tests}. + * + * @author Sam Brannen + * @since 4.2 + * @see Spr8849Tests + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class TestClass4 { + + @Configuration + @ImportResource("classpath:/org/springframework/test/context/junit4/spr8849/datasource-config-with-auto-generated-db-name.xml") + static class Config { + } + + + @Resource + DataSource dataSource; + + + @Test + public void dummyTest() { + assertNotNull(dataSource); + } + +} \ No newline at end of file diff --git a/spring-test/src/test/resources/org/springframework/test/context/junit4/spr8849/datasource-config-with-auto-generated-db-name.xml b/spring-test/src/test/resources/org/springframework/test/context/junit4/spr8849/datasource-config-with-auto-generated-db-name.xml new file mode 100644 index 0000000000..29cddfeeda --- /dev/null +++ b/spring-test/src/test/resources/org/springframework/test/context/junit4/spr8849/datasource-config-with-auto-generated-db-name.xml @@ -0,0 +1,12 @@ + + + + + + + +