사용자 도구

사이트 도구


springframework:springboot:test

문서의 이전 판입니다!


SpringBoot Test

@SpringBootTest

  • 기본적인 SpringBoot 통합 테스트 어노테이션.
  • 이 안에 들어가면 @ExtendWith(SpringExtension.class)가 함께 지정되어 있어서 JUnit 5에서 자동 수행된다.

''@SpringBootApplication'' 클래스 탐지

  • @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 추가, * 테스트 resourcesapplication.yml 필요(혹은 명시적 지정) * @SpringBootTest(classes = config 클래스 목록 지정) <code java> @SpringBootTest(classes = MyServiceConfig.class, webEnvironment = SpringBootTest.WebEnvironment.NONE) @EnableAutoConfiguration class MyApplicationTests { } </code> === 해결 2 === * 테스트 소스에 동일 패키지에 @SpringBootApplication 이 붙은 클래스를 하나 만들어주면 된다. 패키지만 동일하다면 classes지정 불필요. * 패키지 구조가 다르면 classes에 해당 @SpringBootApplication이 붙은 클래스를 지정해도 된다. * 테스트 resourcesapplication.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 버그일 수 있음). 무시하고 계속 개발.

참조

springframework/springboot/test.1648184444.txt.gz · 마지막으로 수정됨: 2022/03/25 14:00 저자 kwon37xi