@ExtendWith(SpringExtension.class)
가 함께 지정되어 있어서 JUnit 5에서 자동 수행된다.
@ExtendWith(SpringExtension.class)
는 SpringBoot 2.1 부터 @SpringBootTest
와 그 하위 애노테이션(@DataJpaTest
등)에 기본 내장돼 있으므로 테스트 클래스에 지정할 필요가 없다.
@SpringBootTest
는 이 애노테이션이 지정된 클래스보다 아래에 있거나 동일 패키지 경로상의 상위 패키지에 존재하는 @SpringBootApplication
클래스도 자동 탐지한다.classes={}
로 명시할 수도 있다.@SpringBootTest(properties = {"some.username=user", "some.password=pwd"}, webEnvironment = SpringBootTest.WebEnvironment.NONE)
# 32mb 기본값 spring.test.context.cache.maxSize=32
@Configuration
@Configuration
은 component scan 으로 자동으로 탐지되지만 @TestConfiguration
은 자동탐지를 하지 않고 import
명시할 때만 작동한다. 테스트시 오작동을 줄일 수 있다.@SpringBootTest
가 지정된 클래스의 static
inner class 로 만들어 지정하면 자동 탐지한다.false
로 둬야한다.spring.main.allow-bean-definition-overriding=true
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=…) with your test
라는 오류가 발생한다면 @SpringBootApplication
애노테이션이 붙은 클래스가 존재하는 패키지의 하위 패키지에 테스트를 둬야 한다는 원칙을 어긴 것이다.a.b.c.Application
이라면, 테스트 클래스는 a.b.c
아래의 패키지에 존재해야한다. 만약 a.b.x
처럼 돼있는 패키지에 테스트 클래스가 존재하면 자동으로 @SpringBootApplication
을 탐색하지 못한다.@SpringBootApplication
이 존재하지않는 Library 성 모듈의 경우 발생한다.@EnableAutoConfiguration
추가,resources
에 application.yml
필요(혹은 명시적 지정)@SpringBootTest(classes = config 클래스 목록 지정)
@SpringBootTest(classes = MyServiceConfig.class, webEnvironment = SpringBootTest.WebEnvironment.NONE) @EnableAutoConfiguration class MyApplicationTests { }
@SpringBootApplication
이 붙은 클래스를 하나 만들어주면 된다. 패키지만 동일하다면 classes
지정 불필요.classes
에 해당 @SpringBootApplication
이 붙은 클래스를 지정해도 된다.resources
에 application.yml
필요(혹은 명시적 지정)@SpringBootTest(classes = SpringBootTestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE) class MyApplicationTests { }
@TestPropertySource(locations="classpath:test.properties") public class ExampleApplicationTests { } You can use @TestPropertySource @TestPropertySource( properties = { "some.username=validate", "some.password=false" } )