3 changed files with 255 additions and 26 deletions
@ -0,0 +1,220 @@
@@ -0,0 +1,220 @@
|
||||
/* |
||||
* Copyright 2002-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.test.context.junit.jupiter; |
||||
|
||||
import java.util.List; |
||||
import java.util.Optional; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.junit.jupiter.api.TestInfo; |
||||
import org.junit.jupiter.api.TestReporter; |
||||
import org.junit.jupiter.api.extension.RegisterExtension; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.beans.factory.annotation.Qualifier; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.context.support.GenericApplicationContext; |
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.TestPropertySource; |
||||
import org.springframework.test.context.junit.SpringJUnitJupiterTestSuite; |
||||
import org.springframework.test.context.junit.jupiter.comics.Cat; |
||||
import org.springframework.test.context.junit.jupiter.comics.Dog; |
||||
import org.springframework.test.context.junit.jupiter.comics.Person; |
||||
|
||||
import static org.junit.jupiter.api.Assertions.*; |
||||
|
||||
/** |
||||
* Integration tests which demonstrate that the Spring TestContext Framework can be used |
||||
* with JUnit Jupiter by registering the {@link SpringExtension} via a static field. |
||||
* Note, however, that this is not the recommended way to register the {@code SpringExtension}. |
||||
* |
||||
* <p> |
||||
* To run these tests in an IDE that does not have built-in support for the JUnit |
||||
* Platform, simply run {@link SpringJUnitJupiterTestSuite} as a JUnit 4 test. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 5.1 |
||||
* @see SpringExtensionTestCase |
||||
* @see SpringExtension |
||||
* @see RegisterExtension |
||||
*/ |
||||
@ContextConfiguration(classes = TestConfig.class) |
||||
@TestPropertySource(properties = "enigma = 42") |
||||
class RegisterExtensionSpringExtensionTestCase { |
||||
|
||||
@RegisterExtension |
||||
static final SpringExtension springExtension = new SpringExtension(); |
||||
|
||||
@Autowired |
||||
Person dilbert; |
||||
|
||||
@Autowired |
||||
List<Person> people; |
||||
|
||||
@Autowired |
||||
Dog dog; |
||||
|
||||
@Autowired |
||||
Cat cat; |
||||
|
||||
@Autowired |
||||
List<Cat> cats; |
||||
|
||||
@Value("${enigma}") |
||||
Integer enigma; |
||||
|
||||
@Test |
||||
void applicationContextInjectedIntoMethod(ApplicationContext applicationContext) { |
||||
assertNotNull(applicationContext, |
||||
"ApplicationContext should have been injected by Spring"); |
||||
assertEquals(this.dilbert, applicationContext.getBean("dilbert", Person.class)); |
||||
} |
||||
|
||||
@Test |
||||
void genericApplicationContextInjectedIntoMethod( |
||||
GenericApplicationContext applicationContext) { |
||||
assertNotNull(applicationContext, |
||||
"GenericApplicationContext should have been injected by Spring"); |
||||
assertEquals(this.dilbert, applicationContext.getBean("dilbert", Person.class)); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredFields() { |
||||
assertNotNull(this.dilbert, "Dilbert should have been @Autowired by Spring"); |
||||
assertEquals("Dilbert", this.dilbert.getName(), "Person's name"); |
||||
assertEquals(2, this.people.size(), "Number of people in context"); |
||||
|
||||
assertNotNull(this.dog, "Dogbert should have been @Autowired by Spring"); |
||||
assertEquals("Dogbert", this.dog.getName(), "Dog's name"); |
||||
|
||||
assertNotNull(this.cat, |
||||
"Catbert should have been @Autowired by Spring as the @Primary cat"); |
||||
assertEquals("Catbert", this.cat.getName(), "Primary cat's name"); |
||||
assertEquals(2, this.cats.size(), "Number of cats in context"); |
||||
|
||||
assertNotNull(this.enigma, |
||||
"Enigma should have been injected via @Value by Spring"); |
||||
assertEquals(Integer.valueOf(42), this.enigma, "enigma"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterByTypeForSingleBean(@Autowired Dog dog) { |
||||
assertNotNull(dog, "Dogbert should have been @Autowired by Spring"); |
||||
assertEquals("Dogbert", dog.getName(), "Dog's name"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterByTypeForPrimaryBean(@Autowired Cat primaryCat) { |
||||
assertNotNull(primaryCat, "Primary cat should have been @Autowired by Spring"); |
||||
assertEquals("Catbert", primaryCat.getName(), "Primary cat's name"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterWithExplicitQualifier(@Qualifier("wally") Person person) { |
||||
assertNotNull(person, "Wally should have been @Autowired by Spring"); |
||||
assertEquals("Wally", person.getName(), "Person's name"); |
||||
} |
||||
|
||||
/** |
||||
* NOTE: Test code must be compiled with "-g" (debug symbols) or "-parameters" in |
||||
* order for the parameter name to be used as the qualifier; otherwise, use |
||||
* {@code @Qualifier("wally")}. |
||||
*/ |
||||
@Test |
||||
void autowiredParameterWithImplicitQualifierBasedOnParameterName( |
||||
@Autowired Person wally) { |
||||
assertNotNull(wally, "Wally should have been @Autowired by Spring"); |
||||
assertEquals("Wally", wally.getName(), "Person's name"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterAsJavaUtilOptional(@Autowired Optional<Dog> dog) { |
||||
assertNotNull(dog, "Optional dog should have been @Autowired by Spring"); |
||||
assertTrue(dog.isPresent(), "Value of Optional should be 'present'"); |
||||
assertEquals("Dogbert", dog.get().getName(), "Dog's name"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterThatDoesNotExistAsJavaUtilOptional( |
||||
@Autowired Optional<Number> number) { |
||||
assertNotNull(number, "Optional number should have been @Autowired by Spring"); |
||||
assertFalse(number.isPresent(), |
||||
"Value of Optional number should not be 'present'"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterThatDoesNotExistButIsNotRequired( |
||||
@Autowired(required = false) Number number) { |
||||
assertNull(number, |
||||
"Non-required number should have been @Autowired as 'null' by Spring"); |
||||
} |
||||
|
||||
@Test |
||||
void autowiredParameterOfList(@Autowired List<Person> peopleParam) { |
||||
assertNotNull(peopleParam, |
||||
"list of people should have been @Autowired by Spring"); |
||||
assertEquals(2, peopleParam.size(), "Number of people in context"); |
||||
} |
||||
|
||||
@Test |
||||
void valueParameterWithPrimitiveType(@Value("99") int num) { |
||||
assertEquals(99, num); |
||||
} |
||||
|
||||
@Test |
||||
void valueParameterFromPropertyPlaceholder(@Value("${enigma}") Integer enigmaParam) { |
||||
assertNotNull(enigmaParam, |
||||
"Enigma should have been injected via @Value by Spring"); |
||||
assertEquals(Integer.valueOf(42), enigmaParam, "enigma"); |
||||
} |
||||
|
||||
@Test |
||||
void valueParameterFromDefaultValueForPropertyPlaceholder( |
||||
@Value("${bogus:false}") Boolean defaultValue) { |
||||
assertNotNull(defaultValue, |
||||
"Default value should have been injected via @Value by Spring"); |
||||
assertEquals(false, defaultValue, "default value"); |
||||
} |
||||
|
||||
@Test |
||||
void valueParameterFromSpelExpression(@Value("#{@dilbert.name}") String name) { |
||||
assertNotNull(name, |
||||
"Dilbert's name should have been injected via SpEL expression in @Value by Spring"); |
||||
assertEquals("Dilbert", name, "name from SpEL expression"); |
||||
} |
||||
|
||||
@Test |
||||
void valueParameterFromSpelExpressionWithNestedPropertyPlaceholder( |
||||
@Value("#{'Hello ' + ${enigma}}") String hello) { |
||||
assertNotNull(hello, |
||||
"hello should have been injected via SpEL expression in @Value by Spring"); |
||||
assertEquals("Hello 42", hello, "hello from SpEL expression"); |
||||
} |
||||
|
||||
@Test |
||||
void junitAndSpringMethodInjectionCombined(@Autowired Cat kittyCat, TestInfo testInfo, |
||||
ApplicationContext context, TestReporter testReporter) { |
||||
|
||||
assertNotNull(testInfo, "TestInfo should have been injected by JUnit"); |
||||
assertNotNull(testReporter, "TestReporter should have been injected by JUnit"); |
||||
|
||||
assertNotNull(context, "ApplicationContext should have been injected by Spring"); |
||||
assertNotNull(kittyCat, "Cat should have been @Autowired by Spring"); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue