[인프런 워밍업 클럽 스터디1기] 백엔드 - 테스트코드(feat.4차과제)

[인프런 워밍업 클럽 스터디1기] 백엔드 - 테스트코드(feat.4차과제)

과제4는 과일 가게에 입고된 과일에 대한 API 를 만드는 과제이다.

이 과제로 테스트코드를 작성해보았다.

새로운 과일을 등록하는 API (post) 를 테스트하는 부분과

이미 등록된 과일을 팔아 saled 필드를 0으로 바꾸는 API (put) 을 테스트하는 부분으로 나누어 2개를 작성하였다.

FruitControllerTest.java

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 동작을 재현할 수 있는 클래스를 사용한다.

image

어지저찌 작성해서 테스트는 통과했다.

테스트가 실패하는 경우와 나머지 api에 대해서도 추후 추가할 예정이다.

아래 블로그들 내용을 참고해서 작성해보았는데

아직 모르는게 너무 많은 것 같다..

 

https://shinsunyoung.tistory.com/52

https://velog.io/@minseokangq/REST-API-CRUD

 

댓글을 작성해보세요.

채널톡 아이콘