[인프런 워밍업 클럽 스터디1기] 백엔드 - 테스트코드(feat.4차과제)
과제4는 과일 가게에 입고된 과일에 대한 API 를 만드는 과제이다.이 과제로 테스트코드를 작성해보았다.새로운 과일을 등록하는 API (post) 를 테스트하는 부분과이미 등록된 과일을 팔아 saled 필드를 0으로 바꾸는 API (put) 을 테스트하는 부분으로 나누어 2개를 작성하였다.FruitControllerTest.javapackage 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/52https://velog.io/@minseokangq/REST-API-CRUD