Spring/테스트코드

Spring Boot 테스트종류

doriver 2024. 5. 23. 14:32

단위(unit) 테스트

하나의 기능 혹은 메서드 기준으로 독립적으로 진행

1개의 테스트는 1개의 기능에 대해서만 테스트

 

테스트 주체와 협력자를 구분하기. 
( 주체는 테스트를 할 객체이며, 협력자는 테스트를 진행하기 위해 정의하는 가짜 객체 )

 

Given( 테스트 위한 준비 ), when( 테스트 진행 ), then( 테스트 결과 검증 )으로 명확하게 작성하기

 

@으로 분류

1. 통합 테스트 - @SpringBootTest

모든 빈을 등록하여 테스트를 진행한다. 그렇기 때문에 애플리케이션 규모가 크면 테스트가 많이 느려진다. 

 

2. 컨트롤러 테스트 - @WebMvcTest

웹상에서 요청과 응답에 대한 테스트를 할 수 있다.

 

 

3. JPA 관련 테스트 - @DataJpaTest

JPA 관련된 설정만 로드한다. 그렇기 때문에 @Entity 클래스를 스캔하여 스프링 데이터 JPA 저장소를 구성한다.

기본적으로 인메모리 데이터베이스를 이용함.

 

@AutoConfigureTestDataBase : 데이터 소스를 어떤 걸로 사용할지에 대한 설정

  • Replace.Any : 기본적으로 내장된 데이터소스를 사용
  • Replace.NONE : @ActiveProfiles 기준으로 프로파일이 설정됨

 

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

 

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

 

4. REST 관련 테스트 - @RestClientTest

Rest 통신의 JSON 형식이 예상대로 응답을 반환하는지 등을 테스트 함

 

5. Json의 직렬화, 역직렬화 테스트 - @JsonTest

Gson, Jackson의 테스트를 제공함.

 

https://happyer16.tistory.com/entry/Spring-Boot-Test-%EC%A2%85%ED%95%A9-%EC%A0%95%EB%A6%AC

 

Spring Boot Test 종합 정리 ( 테스트종류, JUnit5 )

개요 테스트코드의 중요성은 해당 블로그를 읽는 분이라면 모두 알고 있을 것이다. 나도 잘 알고 있지만, 정확한 사용법을 몰라 매번 @SpringBootTest 통합테스트로만 테스트코드를 작성하였다. 이

happyer16.tistory.com