문서의 이전 판입니다!
@ExtendWith(SpringExtension.class)
가 함께 지정되어 있어서 JUnit 5에서 자동 수행된다.@SpringBootTest
는 이 애노테이션이 지정된 클래스보다 아래에 있거나 동일 패키지 경로상의 상위 패키지에 존재하는 '“@SpringBootApplication 클래스도 자동 탐지한다.
*
classes={} 로 명시할 수도 있다.
==== 테스트용 프라퍼티 지정 ====
<code java>
@SpringBootTest(properties = {“some.username=user”, “some.password=pwd”},
webEnvironment = SpringBootTest.WebEnvironment.NONE)
</code>
==== Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=…) with your test ====
*
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 성 모듈의 경우 발생한다.
=== 해결 1 ===
* 테스트에 @EnableAutoConfiguration
추가,
* 테스트
resources에
application.yml 필요(혹은 명시적 지정)
*
@SpringBootTest(classes = config 클래스 목록 지정)
<code java>
@SpringBootTest(classes = MyServiceConfig.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
@EnableAutoConfiguration
class MyApplicationTests {
}
</code>
=== 해결 2 ===
* 테스트 소스에 동일 패키지에
@SpringBootApplication 이 붙은 클래스를 하나 만들어주면 된다. 패키지만 동일하다면
classes지정 불필요.
* 패키지 구조가 다르면
classes에 해당
@SpringBootApplication이 붙은 클래스를 지정해도 된다.
* 테스트
resources에
application.yml 필요(혹은 명시적 지정)
<code java>
@SpringBootTest(classes = SpringBootTestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
class MyApplicationTests {
}
</code>
===== @TestProperties =====
* A Quick Guide to @TestPropertySource | Baeldung
* 테스트용 프라퍼티 오버라이드
<code java>
@TestPropertySource(locations=“classpath:test.properties”)
public class ExampleApplicationTests {
}
You can use @TestPropertySource
@TestPropertySource(
properties = {
“some.username=validate”,
“some.password=false”
}
)
</code>
===== @WebFluxTest =====
*
@WebFluxTest 시에 Java Jackson JSON Library
ObjectMapper 제대로 생성 못하는 문제 발생. 2.0.7에서 해결됨.
* @WebFluxTest does not create ObjectMapper when upgraded to Spring Boot 2.1.0.RELEASE - Stack Overflow
* When using WebFluxTest, WebTestClient's codecs are not customized breaking JSON (de)serialisation that relies on Module-provided functionality · Issue #15070 · spring-projects/spring-boot
* Spock에서 호출시
uri(…)'' 를 호출하고 나면 Generic Type을 놓치는 현상 발생(IntelliJ IDEA 버그일 수 있음). 무시하고 계속 개발.