스프링부트 - #3 테스트

2020. 11. 17. 13:14개발&TIL/스프링

스프링 부트에서는 기본적인 테스트 스타터를 제공

크게 두가지 모듈로 구성 spring-boot-test, spring-boot-test-autoconfigure이며 테스트 관련 자동 설정 기능을 제공

보통은 spring-boot-starter-test로 두 모듈을 함께 사용

테스트 코드 및 예제는 설명 X

@SpringBootTest

통합 테스트를 제공하는 기본적인 스프링 부트 테스트 어노테이션

실제 구동되는 애플리케이션과 똑같은 컨텍스트를 로드하여 테스트

@RunWith 어노테이션을 사용하면 JUnit에 내장된 러너를 사용하는 대신 어노테이션에 정의된 러너 클래스 사용

@SpringBootTest 를 사용하려면 JUnit 실행에 필요한 Springjunit4ClassRunner 클래스를 상속받은 @RunWith(SpringRunner.class)를 추가 사용 필요

@SpringBootTest를 사용할 때 몇 가지 팁

프로파일 환경마다 다른 데이터소스를 갖을 경우 @ActiveProfiles("local")과 같은 방식으로 원하는 프로파일 환경값을 부여

테스트에서 @Transactional을 사용하면 테스트를 마치고 데이터 롤백

@SpringBootTest는 기본적으로 검색 알고리즘을 사용하여 @SpringBootApplication이나 @SpringBootConfiguration
어노테이션을 검색하므로 해당 어노테이션중 하나는 필수

@WebMvcTest

mvc 웹 테스트를 하기 위한 테스트

웹상에서 요청과 응답에 대해 테스트할 수 있음

@WebMvcTest 어노테이션을 사용하면 MVC 관련 설정인 @Controller, @ControllerAdvice, @JsonComponent,
Filter, WebMvcConfigurer, HandlerMethodArgumentResolver 만 로드되기 때문에 @SpringBootTest보다 가벼게 테스트 가능

@WebMvcTest를 사용하기 위해 테스트할 특정 컨트롤러명을 명시해 주어야함 (예: @WebMvcTest(BookController.class))

@Service 어노테이션은 @WebMvcTest의 적용 대상이 아니므로 @MockBean을 활용하여 컨트롤러 내부의 의존성을 대체하여 테스트 필요

  • 테스트 측정을 위한 메서드들
    1. andExpert(status().isOk()) : http 상탯값이 200인지 테스트
    2. andExpect(view().name("book")) : 반환되는 뷰의 이름이 'book'인지 테스트
    3. andExpect(model().attributeExists("bookList")) : 모델의 프로퍼티중 'bookList'가 존재하는지 테스트
    4. andExpect(model().attribute("bookList", contains(book))) :
      모델의 프로퍼티중 'bookList'라는 프로퍼티에 book 객체가 존재하는지 테스트

@DataJpaTest

JPA 관련 테스트 설정만 로드

데이터 소스 설정이 정상인지, JPA를 사용하여 데이터를 생성, 수정, 삭제하는지 테스트 가능

@DataJpaTest는 기본적으로 인메모리 임베디드 데이터베이스를 사용

@Entity 클래스를 스캔하여 스피링 데이터 JPA 저장소를 구성

@AutoConfiureTestDatbase 어노테이션의 기본 설정값인 Replace.Any 를 사용하면 내장된 데이터 소스 사용

Replace.NONE으로 설정하면 @ActiveProfiles에 설정한 프로파일 환경값을 적용

JPA 테스트가 끝날 때마다 자동으로 테스트에 사용한 데이터를 롤백

@AutoConfigureTestDatabase(connection = H2) 와 같이 사용하면 테스트 데이터베이스 설정 가능

@RestClientTest

REST 관련 테스트를 도와주는 어노테이션으로 JSON 형식의 응답등의 반환 테스트 가능

@RestClientTest(BookRestService.class) : 선언시에 테스트 대상이 되는 빈을 주입

@Rule : 지정한 필드값은 @Before나 @After 어노테이션에 상관없이 하나의 테스트 메서드가 끝날 때마다
정의한 값으로 초기화시켜줌

MockRestSeviceServer : 클라이언트와 서버 사이의 REST 테스트를 위한 객체

@JsonTest

JSON 테스트를 지원하는 어노테이션

JSON의 직렬화(serialization)와 역직렬화(deserialization)를 수행하는 라이브러리인 Gson과 Jackson API의 테스트 제공

  • api

    1. GsonTester
    2. JacksonTester
  • @JdbcTest

  • @DataMongoTest

  • @WebFluxTest

  • @JooqTest

  • @DataLdapTest

  • @DataNeo4jTest

  • @DataRedisTest

728x90

'개발&TIL > 스프링' 카테고리의 다른 글

스프링부트 - #5 oAuth2  (0) 2020.11.17
스프링부트 - #4 web  (0) 2020.11.17
스프링부트 - #2 환경설정  (0) 2020.11.17
스프링 부트 - #1 소개  (0) 2020.11.17
Spring Tests에서 스케쥴링 제외하기  (0) 2020.11.10