Spring Boot를 사용하면서 RESTful API의 품질을 보장하기 위해 단위 테스트와 통합 테스트를 수행하는 것은 필수적입니다. 이번 블로그에서는 GitHub 프로젝트 RestfulApiJSON을 기반으로 작성한 JUnit 테스트 시나리오와 코드를 설명합니다.
1. JUnit 테스트 준비
JUnit을 사용하여 Spring Boot RESTful API를 테스트하기 위해 다음과 같은 준비 단계를 거쳤습니다.
1.1 의존성 추가
pom.xml 파일에 Spring Boot Test 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
1.2 테스트 클래스 생성
Spring Boot에서 JUnit 테스트를 실행하기 위해 @SpringBootTest와 @AutoConfigureMockMvc 어노테이션을 사용합니다.
@SpringBootTest
@AutoConfigureMockMvc
class RestfulapiJsonApplicationTests {
@Autowired
private MockMvc mockMvc;
}
2. 테스트 시나리오 설명
테스트는 다음과 같은 순서로 진행되었습니다.
- 데이터 추가 (POST)
- 데이터 조회 (GET)
- 데이터 수정 (PUT)
- 데이터 삭제 (DELETE)
- 삭제 후 데이터 조회 (GET)
3. JUnit 테스트 코드
3.1 전체 테스트 코드
@Test
void contextLoads() throws Exception {
// 테스트 시나리오: 입력 -> 조회 -> 수정 -> 삭제 -> 조회
logger.info(">>JUnit 테스트 시작! (시나리오: 입력 -> 조회 -> 수정 -> 삭제 -> 조회)");
// 테스트 데이터
int lvKeyNo = 1;
String lvValue = "JUnit 테스트";
String lvNewValue = "Update 데이터";
// 데이터 추가 테스트
logger.info(">>데이터 추가 테스트");
String requestBody = "{\"KeyNo\": " + lvKeyNo + ", \"value\": \"" + lvValue + "\"}";
mockMvc.perform(post("/api/data")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk())
.andExpect(content().string("Data created with ID: " + lvKeyNo + ", JSON : {KeyNo=" + lvKeyNo + ", Value=" + lvValue + "}"));
// 데이터 조회 테스트
logger.info(">>데이터 조회 테스트");
mockMvc.perform(get("/api/data/{id}", lvKeyNo))
.andExpect(status().isOk())
.andExpect(content().string("Data :" + lvValue));
// 데이터 수정 테스트
logger.info(">>데이터 수정 테스트");
requestBody = "{\"value\": \"" + lvNewValue + "\"}";
mockMvc.perform(put("/api/data/{id}", lvKeyNo)
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk())
.andExpect(content().string("Data with ID " + lvKeyNo + " updated, JSON : {KeyNo=" + lvKeyNo + ", Value=" + lvNewValue + "}"));
// 데이터 삭제 테스트
logger.info(">>데이터 삭제 테스트");
mockMvc.perform(delete("/api/data/{id}", lvKeyNo)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string("Data with ID " + lvKeyNo + " deleted."));
// 삭제 후 데이터 조회 테스트
logger.info(">>삭제 후 데이터 조회 테스트");
mockMvc.perform(get("/api/data/{id}", lvKeyNo))
.andExpect(status().isOk())
.andExpect(content().string("Data with ID " + lvKeyNo + " not found."));
logger.info(">>JUnit 테스트 시나리오 Pass! ^____^");
}
4. 결과 확인
위 코드를 실행하면 다음과 같은 로그가 출력됩니다.
>>JUnit 테스트 시작! (시나리오: 입력 -> 조회 -> 수정 -> 삭제 -> 조회)
>>데이터 추가 테스트
>>데이터 조회 테스트
>>데이터 수정 테스트
>>데이터 삭제 테스트
>>삭제 후 데이터 조회 테스트
>>JUnit 테스트 시나리오 Pass! ^____^
5. 정리
이 블로그에서는 RESTful API를 JUnit으로 테스트하는 전체 과정을 다루었습니다. MockMvc를 활용하면 Spring Boot 애플리케이션의 다양한 API를 효율적으로 테스트할 수 있습니다. GitHub의 전체 코드는 여기에서 확인할 수 있습니다.
JUnit 테스트를 실습하고 싶다면 위 가이드를 따라하며 직접 실행해 보세요!
'Test > Junit' 카테고리의 다른 글
4.1.Spring Boot 환경에서 JUnit을 사용하여 Java 소스코드 테스트하기 (0) | 2025.01.09 |
---|