[스프링부트] 2. 테스트 코드 작성

Bummy·2022년 8월 10일
0

springboot

목록 보기
2/15
post-thumbnail

2장에서는 그동안 경험해보지 못했던 테스트 코드에 대해 배울 수 있었다.
취업과 이직을 위한 우대조건에 꼭 테스트 코드가 있었는데
지금 회사에서는 경험할 수 없어서 참 아쉬웠던 부분이다.
이렇게라도 공부를 하며 배울 수 있어서 다행이다.

테스트 코드에 대한 개념은 따로 포스팅 해봐야겠다.

1. Hello Controller 테스트 코드 작성하기

Application 만들기

패키지를 만들고 application을 만들어 준다.
클래스 코드는 다음과 같이 작성해준다.

package com.ybkim.springstudy.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application { //앞으로 만들 클래스의 메인 클래스
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

  • @SpringBootApplication: 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 자동으로 설정 가장 최상단에 위치해야함
  • SpringApplication.run : 해당 코드로 내장 WAS를 실행 시킬 수 있음

2. Hello Controller 만들기

@RestController //컨트롤러를 json을 반환하는 컨트롤러로 만들어줌
public class HelloController {
    @GetMapping("/hello") //get 요청을 받을 수 있는 API를 만들어준다.
    public String hello(){
        return "hello";
    }
}
  • @RestController : JSON을 반환하는 컨트롤러로 만들어 줌
  • @GetMapping : GET 요청을 받을 수 있는 API를 만들어 줌

3. Hello Controller Test 만들기

Hello Controller를 테스트할 수 있는 HelloControllerTest를 만들어준다.

@RunWith(SpringRunner.class) //테스트를 진행할때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킴, 여기서는 SpringRunner라는 스프링 실행자 실행
@WebMvcTest(controllers = HelloController.class) //여러 스프링 어노테이션 중, Web에 집중할 수 있는 어노테이션
public class HelloControllerTest {

    @Autowired //스프링티 관리하는 빈을 주입 받는다.
    private MockMvc mvc; //웹api를 테스트할 때 사용한다. http method의 get, post등에 대한 api 테스트를 진행할 수 있다.

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

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

        /*
        mvc.perform: /hello 주소로 http get 요청을 한다.

        .andExpect : mcv.perform의 결과를 검증, 우리가 흔히 알고 있는 200, 400, 500 등의 상태를 검증 여기서는 200인지 아닌지 검증

        .andExpect : 결과를 검증, 여기서는 hello를 리턴하기에 이 값이 맞는지 검증
         */
    }
}
  • @RunWith(SpringRunner.class) : 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킴
    여기서는 SpringRunner라는 스프링 실행자를 사용
  • @WebMvcTest : Web에 집중할 수 있는 어노테이션
    선언할 경우 Contoller, ControllerAdvice 등은 사용할 수 있지만
    Service, Component, Repository 등은 사용할 수 없음
  • @Autowired : 스프링이 관리하는 Bean을 주입 받음
  • private MockMvc mvc : 웹 API를 테스트할 때 사용
    이 클래스를 통해 GET, POST 등에 대한 테스트를 할 수 있음
  • mvc.perform(get("/hello")) : MockMvc를 통해 HTTP Get 요청을 함
  • .andExpect(stauts().isOk()) : HTTP Header의 status를 검증함 200, 400, 500 등, 여기서는 200인지 아닌지 검증함
  • .andExpect(content().string(hello)) : 응답 본문의 내용을 검증함, 여기서는 "hello"를리턴하기에 이 값이 맞는지 확인

테스트 실행은 메소드 왼쪽 화살표를 누르면 된다.

테스트 메소드 실행 결과

수동으로 실행해서 잘 작동하는지 확인해보기
Application.java를 실행시키고

브라우저에서 localhost:8080/hello로 접속해보면

다음과 같이 정상적으로 "hello"를 출력하는 것을 확인할 수 있다.

0개의 댓글