[인프런 워밍업 클럽 스터디1기] 백엔드 - 테스트코드(feat.4차과제)
7개월 전
과제4는 과일 가게에 입고된 과일에 대한 API 를 만드는 과제이다.
이 과제로 테스트코드를 작성해보았다.
새로운 과일을 등록하는 API (post) 를 테스트하는 부분과
이미 등록된 과일을 팔아 saled 필드를 0으로 바꾸는 API (put) 을 테스트하는 부분으로 나누어 2개를 작성하였다.
package com.group.libraryapp.controllerTest;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.group.libraryapp.dto.fruit.FruitCreateRequest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import java.time.LocalDate;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.content;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
public class FruitControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
ObjectMapper objectMapper;
@Test
@DisplayName("과일 새로 등록 테스트(성공)")
public void saveFruitTest() throws Exception{
//given
String name = "자두";
LocalDate date = LocalDate.parse("2024-05-12");
long price = 3000;
FruitCreateRequest fruitCreateRequest = new FruitCreateRequest(name,date,price);
String url = "http://localhost:8080" + "/api/v1/fruit";
//when
final ResultActions resultActions = mockMvc.perform(post(url)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(fruitCreateRequest))
).andDo(print());
//then
resultActions
.andExpect(status().isOk());
}
@Test
@DisplayName("과일 판매후 등록 테스트(성공)")
public void saledFruit() throws Exception{
//given
String url = "http://localhost:8080" + "/api/v1/fruit";
//when
final ResultActions resultActions = mockMvc.perform(put(url)
.queryParam("id","9")
).andDo(print());
//then
resultActions
.andExpect(status().isOk());
}
}
테스트코드에서는 실제 객체와 비슷하지만 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 애플리케이션 서버에 배포하지 않고도 스프링 MVC 동작을 재현할 수 있는 클래스를 사용한다.
어지저찌 작성해서 테스트는 통과했다.
테스트가 실패하는 경우와 나머지 api에 대해서도 추후 추가할 예정이다.
아래 블로그들 내용을 참고해서 작성해보았는데
아직 모르는게 너무 많은 것 같다..
https://shinsunyoung.tistory.com/52
https://velog.io/@minseokangq/REST-API-CRUD
댓글을 작성해보세요.