티스토리 뷰

SpringBoot에서 MockMvc를 이용하여 Test 코드를 작성하는 방법에 대해 간략하게 알아보겠습니다.

1. 라이브러리 추가

testImplementation 'org.springframework.boot:spring-boot-starter-test'
  • testImplementation 이 작성되어 있는지 확인합니다.

 

2. Test 클래스 생성

  • test 경로 밑에 원하는 패키지와 클래스를 생성합니다.

 

3. 어노테이션 작성

@SpringBootTest(classes = MymsgApiApplication.class)
@AutoConfigureMockMvc
@ActiveProfiles("local")
  •  @SpringBootTest : 스프링부트 통합 테스트라는 것을 나타내며 classes 속성에 @SpringBootApplication 어노테이션이 작성된 클래스를 로드하여야 합니다.
  • @AutoConfigureMockMvc : MockMvc 객체를 자동으로 구성하도록 지시하며 MockMvc는 HTTP 요청을 시뮬레이트하고 컨트롤러를 테스트하는 데 사용됩니다.
  • @ActiveProfiles : 활성화할 프로파일을 지정합니다. 여기선 "local"로 지정하였습니다.

 

4. 소스코드 작성

  @Autowired
  private Gson gson;

  @Autowired
  private MockMvc mockMvc;

  /**
   * 로그인 성공
   */
  @Test
  void 로그인성공() throws Exception {
    final String url = "/user/loginProc";

    final UserLginReq userLginReq = new UserLginReq();
    userLginReq.setUserId("admin");
    userLginReq.setUserPw("1234");

    final ResultActions result = mockMvc.perform(
      MockMvcRequestBuilders.post(url)
        .content(gson.toJson(userLginReq))
        .contentType(MediaType.APPLICATION_JSON)
    );

    int status = result.andReturn().getResponse().getStatus();
    assert status == 200;
  }
  • gson 과 mockmvc를 주입받고, url에 Request 데이터를 맵핑하여 호출하고 결과를 반환하는 소스입니다. assert를 통해 Http 통신의 상태값을 체크합니다.

 

5. 전체소스

package com.myapi.test;

import com.google.gson.Gson;
import com.myapi.mymsgapi.MymsgApiApplication;
import com.myapi.mymsgapi.comm.utils.DateUtil;
import com.myapi.mymsgapi.comm.utils.StringUtil;
import com.myapi.mymsgapi.contoller.user.dto.UserLginReq;
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.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;


@SpringBootTest(classes = MymsgApiApplication.class)
@AutoConfigureMockMvc
@ActiveProfiles("local")
class ApplicationTester {

  @Autowired
  private Gson gson;

  @Autowired
  private MockMvc mockMvc;

  /**
   * 로그인 성공
   */
  @Test
  void 로그인성공() throws Exception {
    final String url = "/user/loginProc";

    final UserLginReq userLginReq = new UserLginReq();
    userLginReq.setUserId("admin");
    userLginReq.setUserPw("1234");

    final ResultActions result = mockMvc.perform(
      MockMvcRequestBuilders.post(url)
        .content(gson.toJson(userLginReq))
        .contentType(MediaType.APPLICATION_JSON)
    );

    int status = result.andReturn().getResponse().getStatus();
    assert status == 200;
  }


  /**
   * 로그인 실패
   */
  @Test
  void 로그인실패_유효성오류() throws Exception {
    final String url = "/user/loginProc";

    final UserLginReq userLginReq = new UserLginReq();
    userLginReq.setUserId("admin");
    userLginReq.setUserPw("");

    final ResultActions result = mockMvc.perform(
      MockMvcRequestBuilders.post(url)
        .content(gson.toJson(userLginReq))
        .contentType(MediaType.APPLICATION_JSON)
    );

    int status = result.andReturn().getResponse().getStatus();
    assert status == 500;
  }


  /**
   * 간단한 Util 테스트
   */
  @Test
  public void 날짜테스트() {
    String str = DateUtil.getDateStr();
    if (StringUtil.isNotEmpty(str)) {
      System.out.println(str);
    } else {
      System.out.println("isEmpty");
    }
  }
}



감사합니다.

최근에 올라온 글
Total
Today
Yesterday