@SpringBootTest
: 테스트를 실행할 때 테스트 클래스에서 애플리케이션 콘텍스트를 자동으로 부트스트랩하기 위해 사용.
스프링 리액티브 웹을 위해 테스트 의존성 추가(build.gradle)
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.1'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.polarbookshop'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//스프링 리액티브 웹을 위해 추가
testImplementation 'org.springframework.boot:spring-boot-starter-webflux'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
CatalogServiceApplicationTests.java 에 통합 테스트 코드 추가
package com.polarbookshop.catalogservice;
import com.polarbookshop.catalogservice.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import static org.assertj.core.api.Assertions.assertThat;
// 스프링 부트 애플리케이션을 테스트하기 위한 셋업 제공
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class CatalogServiceApplicationTests {
@Autowired
// 테스트를 위해 REST엔드포인트를 호출할 유틸리티
private WebTestClient webTestClient;
@Test // 테스트케이스 식별
void whenPostRequestThenBookCreated() {
var expectedBook = new Book("1231231231", "제모기다", "박작가", 8.50);
/*
/books로 POST 요청을 보냄.
expectedBook 객체를 요청 본문으로 보냄.
응답 상태 코드가 201 Created인지 확인.
응답 본문이 Book 객체인지 확인.
응답으로 받은 Book 객체가 null이 아닌지 검증.
생성된 Book 객체의 isbn이 예상한 값과 같은지 확인.
* */
webTestClient
.post() // HTTP POST 요청
.uri("/books") // 해당 엔드포인트로 요청
// HTTP 요청 본문에 expectedBook 객체를 JSON으로 변환하여 추가
.bodyValue(expectedBook)
// 요청 전송 실행(비동기 요청이므로 응답을 기다리지 않고 즉시 반환)
.exchange()
// HTTP 응답이 "201 Created" 상태인지 확인
.expectStatus().isCreated()
// expectBody(Book.class): HTTP 응답 본문을 Book 객체로 변환하여 가져옴
// value(actualBook -> {}): 응답 본문을 actualBook으로 받아서 검증하는 람다 함수 실행.
.expectBody(Book.class).value(actualBook -> {
// HTTP 응답 본문이 널 값인지 아닌지 확인(null이면 테스트 실패)
assertThat(actualBook).isNotNull();
// 생성된 객체가 예상과 같은지 확인
assertThat(actualBook.isbn()).isEqualTo(actualBook.isbn());
});
}
}
gradlew.bat test --tests CatalogServiceApplicationTests 로 테스트 실행.

'Cloud Native Spring in Action' 카테고리의 다른 글
@JsonTest를 사용한 JSON 직렬화 테스트 (0) | 2025.02.10 |
---|---|
@WebMvcTest를 사용한 REST 컨트롤러 테스트 (0) | 2025.02.10 |
JUnit5를 이용한 단위 테스트 (0) | 2025.02.07 |
중앙식 예외 핸들러와 이를 이용한 오류 처리 (0) | 2025.02.06 |
데이터 유효성 검사 (1) | 2025.02.06 |