반응형

목차

  • @SpringBootTest
  • @WebMvcTest
  • @DataJpaTest
  • @RestClientTest
  • @JsonTest

들어가기 앞서..

Springboot 2.2.0 이후 버전부터는 junit5가 기본으로 되었다.

 

Junit 5 특징

Junit5는 Junit Platform, Junit Jupiter, Junit Vintage 모듈 세 가지로 구성되어 있다.

  • Junit Platform - JVM에서 동작하는 테스트 프레임워크이다. 테스트를 발견하고 계획을 생성하고 결과를 보고하는 TestEngine 인터페이스를 정의한다.
  • Junit Jupiter - Junit5 TestEngine의 실제 구현체입니다. Junit5 기반의 테스트를 실행시키기 위한 TestEngine을 Platform에 제공합니다.
  • Junit Vintage - TestEngine에서 Junit3 및 Junit4 기반 테스트를 실행하기 위한 기능을 제공한다.

@SpringBootTest

- 스프링 부트의 테스트 어노테이션에서 @SpringBootTest는 만능이다.

- 실제 구동되는 애플리케이션과 똑같이 애플리케이션 컨텍스트를 로드하여 테스트하기 때문에 하고 싶은 모든 테스트를 수행 할 수 있다.

- 규모가 클수록 속도가 느려진다.

 

@SpirngBootTest 파라미터

 

1. 테스트가 실행되기 전에 적용할 프로퍼티를 주입시킬 수 있다.

2. 테스트가 실행되기 전에 {key=value} 형식으로 프로퍼티를 추가할 수 있다.

3. 애플리케이션 컨텍스트에 로드할 클래스를 지정할 수 있다. 따로 지정하지 않으면 @SpringBootConfiguration을 찾아서 로드한다.

4. 애플리케이션이 실행될 때의 웹 환경을 설정할 수 있다. 기본값은 Mock 서블릿을 로드하여 구동된다.

 

**Tip

- 프로파일 환경(개발, QA, 운영)마다 다른 데이터소스(DataSource)를 갖는다면 @ActiveProfiles("local")과 같은 방식으로 원하는 프로파일 환경값을 부여한다.

- 테스트에서 @Transactional을 사용하면 테스트를 마치고 나서 수정된 데이터가 롤백됩니다.

하지만 webEnvironment의 RANDOM_PORT나 DEFINED_PORT로 테스트를 설정하면 테스트가 별도의 스레드에서 수행되기 때문에 rollback이 수행되지 않음

- @SpringBootTest는 기본적으로 검색 알고리즘을 사용하여 @SpringBootApplication이나 @SpringBootConfiguration 어노테이션을 찾습니다. 스피링 부트 테스트이기 때문에 해당 어노테이션중 하나는 필수이다.

 

@WebMvcTest

- MVC를 위한 테스트이다.

- 웹에서 테스트하기 힘든 컨트롤러를 테스트하는 데 적합하다.

- 시큐리티 혹은 필터까지 자동으로 테스트하며 수동으로 추가/삭제까지 가능하다.

- @WebMvcTest 어노테이션을 사용하면 MVC관련 설정인 @Controller, @ControllerAdvice, @JsonComponent와 Filter, WebMvcConfigurer, HandlerMethodArgumentResolver만 로드된다.

 

@DataJpaTest

- JPA 관련 테스틈 설정만 로드한다.

- 데이터소스 설정이 정상적인지, JPA를 사용하여 데이터를 제대로 생성, 수정, 삭제하는지 등의 테스타가 가능하다.

- 기본적으로 인메모리 임베디드 데이터베이스를 사용하며, @Entity 클래스를 스캔하여 스프링 데이터 JPA 저장소를 구성한다. 

- JPA 테스트가 끝날 때마다 자동으로 테스트에 사용한 데이터를 롤백한다. @Transactional 어노테이션 내장되어 있다.

 

@RestClientTest

- REST 관련 테스트를 도와주는 어노테이션이다.

- REST 통신의 데이터형으로 사용되는 JSON 형식이 예상대로 응답을 반환하는지 등을 테스트할 수 있다.

 

@JsonTest

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

- JSON의 직렬화 역 직렬화를 수행하는 라이브러리인 Gson과 Jackson API의 테스트를 제공한다.

- 각각 GsonTester와 JacksonTester를 사용하여 테스트를 수행한다.

 

마무리

각 어노테이션의 용도를 정확히 이해하여 적합한 상황에서 사용하는 것이 중요하다.

스프링의 모든 빈을 올리는 대신, 각 테스트에 필요한 가짜 객체를 만들어 테스트하는 방법을 사용해 상황에 맞는 테스트를 하는 게 중요하다.

 

 

 

** Intellij에서 테스트코드 참고사항

1. 아래와 같이 에러가 출력되면 Setting에 Run tests using을 inteillij IDEA로 수정 후 확인해보자.

 

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':test'.

 

Junit5을 사용하면서 문제가 발생하는 걸로 보인다.

 

 

2. 테스트 코드 한글 이름이 깨지면 탭에서 Help > Edit custom VM Options..설정에 아래 encoding 라인을 추가하자

-Dfile.encoding=UTF-8

 

 

 

 

728x90
반응형

+ Recent posts