스프링 부트에서의 테스트 코드

hyyyynjn·2021년 2월 21일
1
post-thumbnail

테스트 코드

  • TDD : Test Driven Development. 즉, 테스트가 주도하는 개발이다. 테스트 코드를 먼저 작성하는 것부터 시작한다.

  • 단위 테스트(Unit Test) : TDD의 첫 단계인 '기능 단위의 테스트 코드를 작성하는 것'을 말한다.

  • 단위 테스트 코드를 작성함으로써 얻는 이점 -> 반드시 익혀야할 기술이자 습관이다.

    1. 초기에 문제를 발견하게 도와준다.
    2. 코드를 리팩토링, 라이브러리 업그레이드를 할 경우, 기존 기능이 올바르게 작동하는지 확인할 수 있다.
    3. 코드작성 > Tomcat 실행 > Postman으로 HTTP요청 > 요청결과를 print하여 검증 하는 원시적 과정을 줄일 수 있다.
    4. 자동 검증이 가능하다.
  • 테스트 코드 작성을 도와주는 프레임워크들 (xUnit)

    JUnit - Java
    DBUnit - DB
    CppUnit - C++
    NUnit - .net

실습

  • HelloController 라는 컨트롤러를 만든다
// @RestController
// 컨트롤러를 JSON 을 반환하는 컨트롤러로 만들어준다.
@RestController
public class HelloController {

    // @GetMapping
    // HTTP Get Method 의 요청을 받을 수 있는 API를 만들어준다.
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}
  • HelloController를 테스트하기 위해 'src/test/java/com/example/springExample/web'에 'HelloControllerTest'클래스를 만든다.
// @RunWith(SpringRunner.class)
//  테스트 진행시 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다 (여기선 SpringRunner라는 스프링 실행자를 실행시킴)
//  다시말해, 스프링 부트 테스트와 JUnit 사이의 연결자 역할을 한다.
@RunWith(SpringRunner.class)
// @WebMvcTest
//  여러가지의 스프링 테스트 어노테이션 중에서 Web(Spring Mvc)에 집중할 수 있는 어노테이션이다.
//  @Controller,@ControllerAdvice를 사용할 수 있다.
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {

    // @Autowired
    //  스프링이 관리하는 Bean을 주입 받는 역할을 한다.
    // private MockMvc mvc
    //  웹 API를 테스트할 경우에에 사용한. HTTP GET,POST 등에 대한 테스트가 능가
    @Autowired
    private MockMvc mvc;

    @Test
    public void hello가_리턴된다() throws Exception {
        String hello = "hello";

        // mvc.perform(get("/hello"))
        // '/hello' 주소로 GET 요청을 한다
        // andExpect(status().isOk())
        //  mvc.perform의 결과를 검증한다. OK(200)인지 검증
        // .andExpect(content().string(hello));
        //  응답 본문의 내용을 검증한다.
        mvc.perform(get("/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string(hello));
    }
}

0개의 댓글