본문 바로가기

SPRING/Spring

[되기시리즈 스프링부트3| 04장 스프링부트와 테스트 ] Given-When-Then패턴

1. 학습목표

테스트코드에 대해 이해할 수 있다.

2.필요 개념 문장정리

출처- 되기시리즈 스프팅부트3

 3. 코드작성

package me.ggambo.springbootdeveloper;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
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.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@SpringBootTest // 빈을 찾고 테스용 어플리케이션 컨텍스트를 만든다.
@AutoConfigureMockMvc // 어플리케이션 서버에 배포하지 않고 테스트용 MVC환경 제공, 컨트롤러 테스트
class TestControllerTest {

    @Autowired
    protected MockMvc mockMvc;

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private MemberRepository memberRepository;

    @BeforeEach // 테스트 실행 전 실행 메서드
    public void mockMvcSetUP() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @AfterEach // 테스트 후 실행 메서드
    public void cleanUp() {
        memberRepository.deleteAll();
    }

    @DisplayName("getAllMembers: 아티클 조회에 성공한다.")
    @Test
    public void getAllMember() throws Exception {
        // given 멤버를 저장
        final String url = "/test";
        Member savedMember = memberRepository.save(new Member(1L,"홍길동"));
        // when 멤버 리스트를 조회하는 API를 호출
        final ResultActions result = mockMvc.perform(get(url) // 요청전송
                .accept(MediaType.APPLICATION_JSON)); // JSON타입으로 전송
        // then 응답 코드 200 OK, 반환값 중 0번째 id와 name 값과 같은지 확인
        result
                .andExpect(status().isOk()) //
                .andExpect(jsonPath("$[0].id").value(savedMember.getId()))
                .andExpect(jsonPath("$[0].name").value(savedMember.getName()));
    }

}

4.마무리

 Given-When-Then패턴을 이해하고 테스트코드를 경험해볼 수 있었다.