스프링 부트 테스트
리액티브 단위 테스트 작성
스프링 부트의 내장 컨테이너 테스트 기능
단위 테스트와 통합 테스트의 중간에 위치하는 슬라이스 테스트 활용
테스트 도구를 활용한 블로킹 코드 검출
spring-boot-starter-test
스프링 부트에서는 테스트에 필요한 여러 도구를 쉽게 사용할 수 있도록 스타터를 제공.
- 테스트 라이브러리
- JUnit 5 : Java 애플리케이션의 단위 테스트를 위한 사실상의 표준
- Spring Test & Spring Boot Test : 스프링 부트 애플리케이션에 대한 유틸리티 및 통합 테스트 지원
- AssertJ : 능수능란한 단언(Assertion) 라이브러리
- Hamcrest : 매처 객체 라이브러리
- Mockito : 자바 Mocking 프레임워크
- JSONassert : JSON용 단언(Assertion) 라이브러리
- JsonPath : JSON용 XPath
테스트 종류
- 단위 테스트(Unit Test)
- 테스트 대상 클래스가 의존하는 다른 협력 클래스의 실제 인스턴스 대신 가짜 인스턴스인 스텁(Stub)을 사용해서 협력 클래스를 테스트 대상에서 제외하고, 오직 테스트 대상 클래스만의 기능을 테스트하고 검증하는 것
- 단위(Unit)란 자바에서는 하나의 클래스라고 볼 수 있음
- 테스트 중 가장 단순하고 빠르며 쉬운 테스트
- 테스트를 구성하는데 필요한 사전 준비가 가장 단순함
- StepVerifier
react-test프로젝트에서 제공publisher를 구독하면서 예상 값과 순서를 검증할 수 있음- 검증이 실패할 경우,
AssertionError발생 create메서드로 인스턴스 생성- 반드시
verify()메서드를 호출해야함
- 통합 테스트(Integration Test)
- 전 계층을 아우르는 종단 간 테스트
- 스프링 부트에서는 완전한 기능을 갖춘 내장 웹 컨테이너를 임의의 포트에 연결해서 구동할 수 있음
- 실제 애플리케이션에서와 마찬가지 방식으로 생성되고 실행되는 진짜 애플리케이션 구성요소와 협력
- 슬라이스 테스트(Slice Test)
- 단위 테스트와 종단 간 통합 테스트 중간 정도에 해당하는 테스트
- 스프링 부트에는 다양한 테스트 기능 지원
// 테스트 기능 제공
@AutoConfigureRestDosc
@DataJdbcTest
@DataJpaTest
@DataLdapTest
@DataMongoTest
@DataNeo4jTest
@DataRedisTest
@JdbcTest
@JooqTest
@JsonTest
@RestClientTest
@RestClientTest
@WebFluxTest
@WebMvcTest
리액티브 단위 테스트 작성(단위 테스트)
- 도메인 객체 테스트
- 다른 컴포넌트와 상호작용하는 코드 테스트
내장 컨테이너 테스트 실행(통합 테스트)
- 실제 웹 컨테이너를 사용하는 테스트 케이스
스프링 부트 슬라이스 테스트(슬라이스 테스트)
- 몽고 디비 슬라이스 테스트
- 웹 플럭스 슬라이스 테스트
블록 하운드 사용 단위 테스트
- 단위 테스트 블로킹 코드 검출
- 블로킹 호출을 포함하는
addItemToCart()구현 - 블록 하운드 통합 테스트 준비
- 데이터 및 가짜 객체 설정
- 테스트 안에서 블로킹 코드 검출
정리
StepVerifier를 사용해서 리액티브 테스트 작성- 리액티브 스트림보다 하부 계층에 위치하는 도메인 객체를 간단하게 테스트
@MockBean을 사용해서 만든 가짜 협력자와StepVerifier를 사용해서 리액티브 서비스 테스트- 리액티브 결과뿐 아니라
complete와error같은 리액티브 스트림 시그널도 검증 - 스프링 부트를 사용해서 완전한 기능을 갖춘 웹 컨테이너 실행
@WebFluxTest나@DataMongoTest를 사용해서 애플리케이션의 일부 계층만 더 빠르게 테스트할 수 있는 슬라이스 테스트- 리액터 블록하운드 모듈을 사용해서 블로킹 코드 검출
참고
- "스프링 부트 실전 활용 마스터", 그렉 턴키스트 저(원서: "Hacking with Spring Boot 2.3 - Reactive Edition")
- 소스 코드
'dev > Spring' 카테고리의 다른 글
| [정리] 스프링 부트 실전 활용 마스터(6) (0) | 2022.06.30 |
|---|---|
| [정리] 스프링 부트 실전 활용 마스터(5) (0) | 2022.06.23 |
| [정리] 스프링 부트 실전 활용 마스터(3) (0) | 2022.05.26 |
| [정리] 스프링 부트 실전 활용 마스터(2) (0) | 2022.05.19 |
| [정리] 스프링 부트 실전 활용 마스터(1) (0) | 2022.05.12 |