스프링 부트(Spring Boot) 버전 2.3.1, Gradle 6.4.1 기준입니다.
1. 패키지를 생성 (예: com.example.awsboard.web)
2. 컨트롤러 및 GetMapping 예제 작성

package com.example.awsboard.web;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BasicController {

    @GetMapping("/hell")
    public String hello() {
        return "Hell";
    }
}

 

3. 동일한 패키지를 src > test > java 에 패키지 생성
4. 패키지 내에 BasicControllerTest 클래스 생성

5. 테스트 코드 작성

package com.example.awsboard.web;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

public class BasicControllerTest {
    @Autowired private MockMvc mvc;

    @Test
    public void hell이_리턴된다() throws Exception {
        String hell = "Hell";

        mvc.perform(get("/hell"))
                .andExpect(status().isOk())
                .andExpect(content().string(hell));

    }

}
  • @Autowired private MockMvc mvc; – HTTP GET, POST 등에 대한 API 테스트 시작
  • mvc.perform(get("/hell"))MockMvc를 통해 HTTP GET 요청
  • .andExpect(status().isOk()) – HTTP Status가 200(OK)인지 검증
  • .andExpect(content().string(hell)) – 응답 본문의 내용이 hell 과 일치하는지 검증

 

6. 메소드 코드 옆의 재생 버튼(Run Test) 클릭

 

7. 테스트 결과 확인

 


 

테스트 예제: DTO를 JSON으로 리턴하는 페이지

package com.example.awsboard.web;

import com.example.awsboard.web.dto.BasicControllerDTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BasicController {

    ...

    @GetMapping("/hell/dto")
    public BasicControllerDTO hellDto(@RequestParam("name") String name, @RequestParam("amount") int amount) {
        return new BasicControllerDTO(name, amount);
    }
}
package com.example.awsboard.web;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@WebMvcTest
public class BasicControllerTest {
    @Autowired private MockMvc mvc;

    ...

    @Test
    public void basicControllerDTO가_리턴된다() throws Exception {
        String name = "Hell";
        int amount = 1000;

        mvc.perform(get("/hell/dto").param("name", name).param("amount", String.valueOf(amount)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name").value(name))
                .andExpect(jsonPath("$.amount").value(amount));
    }

}

JSON으로 된 내용 검증은

  • .andExpect(jsonPath("$.name").value(name))
  • .andExpect(jsonPath("$.amount").value(amount))

 

출처: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

문의 | 코멘트 또는 yoonbumtae@gmail.com




1개의 댓글

스프링 부트(Spring Boot): 웹 페이지를 정상적으로 렌더링하는지 단위 테스트 - BGSMM · 2020년 7월 12일 2:22 오후

[…] 참고: Spring Boot: JUnit 단위 테스트 기초 (GetMapping 테스트, 인텔리제이 기준) […]

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다