사용자 도구

사이트 도구


springframework:springboot:test

SpringBoot Test

@SpringBootTest

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

테스트용 프라퍼티 지정

@SpringBootTest(properties = {"some.username=user", "some.password=pwd"},
                webEnvironment = SpringBootTest.WebEnvironment.NONE)

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 클래스 목록 지정)
@SpringBootTest(classes = MyServiceConfig.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
@EnableAutoConfiguration
class MyApplicationTests {
}

해결 2

  • 테스트 소스에 동일 패키지에 @SpringBootApplication 이 붙은 클래스를 하나 만들어주면 된다. 패키지만 동일하다면 classes지정 불필요.
  • 패키지 구조가 다르면 classes에 해당 @SpringBootApplication이 붙은 클래스를 지정해도 된다.
  • 테스트 resourcesapplication.yml 필요(혹은 명시적 지정)
@SpringBootTest(classes = SpringBootTestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
class MyApplicationTests {
}

@TestProperties

@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {
 
}
 
 
You can use @TestPropertySource
 
@TestPropertySource(
    properties = {
        "some.username=validate",
        "some.password=false"
    }
)

@WebFluxTest

참조

springframework/springboot/test.txt · 마지막으로 수정됨: 2020/07/09 15:06 저자 kwon37xi