Notepad

스프링 부트 테스트

리액티브 단위 테스트 작성
스프링 부트의 내장 컨테이너 테스트 기능
단위 테스트와 통합 테스트의 중간에 위치하는 슬라이스 테스트 활용
테스트 도구를 활용한 블로킹 코드 검출

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를 사용해서 리액티브 서비스 테스트
  • 리액티브 결과뿐 아니라 completeerror 같은 리액티브 스트림 시그널도 검증
  • 스프링 부트를 사용해서 완전한 기능을 갖춘 웹 컨테이너 실행
  • @WebFluxTest@DataMongoTest를 사용해서 애플리케이션의 일부 계층만 더 빠르게 테스트할 수 있는 슬라이스 테스트
  • 리액터 블록하운드 모듈을 사용해서 블로킹 코드 검출

참고

profile

Notepad

@Apio

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!