IT/Spring

[JUnit] 테스트 기본 - 1

infe91 2020. 2. 13. 22:01

개발에 있어서 테스트 코드는 중요하다.
테스트 중에서 단위 테스트는 기능 단위의 테스트 코드를 작성한다.

필자는 첫 회사인 씨xx에 입사를 했을 때 테스트 코드가 뭔지도 몰랐고, 회사에 있는 선임은 테스트 코드가 아닌 개발 방식을 사용해왔기에 실무에서는 코드를 짜고 바로 배포하고 화면에서 눈으로 확인하는 것인 줄 알았다.
그래서 개발을 할 때면

  1. 백단 코드 작성
  2. war로 묶어서 export
  3. war을 서버에 설치되어있는 톰캣 서버로 파일 질라를 통해서 이동
  4. 톰캣 Stop, Start
  5. 인터넷 익스플로러를 켜서 화면에서 백단 코드와 연관되어있는 버튼 클릭
  6. 성공 또는 실패
  7. 실패시 1~5번 반복

이런 식으로 개발을 했었다.

그러다가 두 번째 회사로 이직을 하면서 TDD을 배우면서 테스트 코드가 뭔지 알게 되었고, 어떤 식으로 테스트 코드를 써서 나가는지 알게 되었다.

그럼 이제 테스트 코드는 어떤 식으로 해나가는지 차근차근 알아보도록 하자.

  1. 아래와 같이 소스 코드를 먼저 작성한다.

HelloController.java

package com.incheol.app.web;

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

@RestController
public class HelloController {

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

}
  1. 테스트 패키지로 가서 테스트 코드를 작성한다.

HelloControllerTest.java

package com.incheol.app.web;

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;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;


@RunWith(SpringRunner.class) 
@WebMvcTest // Web(Spring MVC)에 집중할 수 있는 어노테이션
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc; //웹 API을 테스트 할때 사용하는 가짜 데이터 , GET, POST 등에 대한 테스트를 할 수 있음.


    @Test
    public void returnHello() throws Exception {
        String hello = "hello";

        //테스트를 하는 행위(perform) => 하나씩 기대 값을 넣고 테스트를 한다. 
        mvc.perform(get("/hello")) // Get에 대한 주소를 가져오는 행위를 한다.
        .andExpect(status().isOk()) // 상태가 200 값을 기대하며 기대 값과 결과가 같다면 테스트는 다음으로 넘어간다.
        .andExpect(content().string(hello)); // hello의 값을 기대하며 기대 값과 결과가 같다면 모든 테스트를 통과한다. 
    }

}

  1. JUnit을 실행하고 모든 테스트가 무사히 통과 되면 화면 왼쪽에 테스트가 통과했다는 초록색 바가 뜬다.

4. 테스트 코드까지 작성 했으니, 실제로 웹 화면에서 'hello' 가 뜨는지 확인해보자.

이렇게 항상 코드 작성 후 에는 테스트 코드가 중요하다.

앞으로 필자와 함께 테스트 코드에 대해서 하나 하나 알아가 보도록 하자.

테스트 코드가 습관화가 되도록 노력해보자.