YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

간단한 JUnit Test 코드 작성

참고 사이트:

웹 브라우저로 테스트하던 것을 JUnit 테스트 코드로 실행해 봅니다.

src – test 디렉토리에 동일한 패키지 경로에 CalcControllerTests 클래스를 만들고 아래와 같이 입력합니다.

package com.example.demo;

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
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.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
// @FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CalcControllerTests {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void plus() throws Exception {
        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders
                .get("/plus")
                .param("param1", "10")
                .param("param2", "20");

        MvcResult result = this.mockMvc.perform(requestBuilder)
                .andReturn();

        String content = result.getResponse().getContentAsString();
        System.out.println("content === " + content);
    }

    @Test
    public void minus() throws Exception {
        String param1 = "10";
        String param2 = "20";

        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders
                .get("/minus/{param1}/{param2}", param1, param2);

        this.mockMvc.perform(requestBuilder)
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("-10")))
                .andReturn();
    }

    @Test
    public void hello() throws Exception {
        String resultString = "{\"name\":\"x1fingers\",\"id\":1,\"message\":\"Hello x1fingers!\"}";

        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders
                .get("/hello/")
                .param("name", "x1fingers");

        this.mockMvc.perform(requestBuilder)
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().json(resultString))
                .andReturn();
    }

    @Test
    public void concat() throws Exception {
        String param1 = "a";
        String param2 = "b";
        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders
                .get("/api/concat/{param1}/{param2}", param1, param2)
                .header("Accept", "application/vnd.x1fingers-v2+json");

        this.mockMvc.perform(requestBuilder)
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("ab")))
                .andReturn();
    }
}
  • @AutoConfigureMockMvc 를 사용하면 별도의 MockMvc 셋업을 할 필요가 없습니다.
  • @FixMethodOrder(MethodSorters.NAME_ASCENDING) 를 사용하면 메소드명 순서대로 테스트가 진행됩니다.
  • 원하는 응답 값을 확인할 때에는 mockMvc.perform().andExpect() 구문에서 처리합니다.

테스트 클래스나 해당 메소드를 마우스나 키보드로 선택한 상태에서 실행하면 됩니다.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.