[spring boot] Hello 테스트 코드 작성하기

Momenter·2021년 7월 8일
0

Spring Boot

목록 보기
4/15

테스트 코드 작성 하기

  1. TDD란?

    TDD는 테스트가 주도하는 개발을 이야기 합니다. 테스트 코드를 먼저 작성하는 것부터 시작합 니다.

  1. 단위 테스트의 장점

    -개발단계 초기에 문제를 발견하게 도와준다.
    -기능에 대한 불확실성을 감소시킬 수 있다.
    -시스템에 대한 실제 문서를 제공한다. 단위 테스트 자체가 문서로 사용될 수 있다.

Hello Controller 테스트 코드 작성하지

Application 클래스 작성

scr -> main -> java 에 패키지를 생성해 줍니다.
(저는 com.momenting.book.springboot로 생성했습니다.)
생성한 패키지에 Application이라는 이름으로 클래스를 생성해 줍니다.

package com.momenting.book.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로 실행됩니다.

HelloController 작성

위에서 생성한 패키지에 web이라는 패키지를 새로 만들어 줍니다.
거기에 HelloController클래스를 생성해 줍니다.

package com.momenting.book.springboot.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";
     }
}

@RestController JSON을 반환하는 컨트롤러로 만들어 주기위한 어노테이션
@GetMapping Get요청을 받을 수 있는 API를 만들어 주기위한 어노테이션

테스트 코드로 검증하기


src -> test -> java에 main에서 만든 패키지와 똑같은 패키지생성 후 HelloControllerTest클래스를 생성해줍니다. 테스트 클래스는 대상 클래스명뒤에 Test를 붙혀 명명해 줍니다.

package com.momenting.book.springboot.web;

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;

import static org.hamcrest.Matchers.is;
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;

@RunWith(SpringRunner.class)
@WebMvcTest(controllers =  HelloController.class)
public class HelloControllerTest {
    @Autowired
    private MockMvc mvc;

    @Test
    public void helloTest() throws Exception {
        String hello = "hello";
        mvc.perform(get("/hello"))
                .andExpect(status().isOk()) //HTTP Status가 200인지 아닌지를 검증
                .andExpect(content().string(hello)); // Controller에서 "hello"를 리턴하기에 이 값이 맞는지 검증
    }
}

@RunWith(SpringRunner.class) 테스트를 진행할 때 SpringRunner이라는 스프링 실행자를 사용하기 위한 어노테이션
@Autowired 스프링이 관리하는 빈(Bean)을 자동 주입 받기위한 어노테이션
MockMvc 웹 API를 테스트할 때 사용, GET, POST등에 대한 API 테스트를 할 수 있습니다.
위와 같이 작성 후


실행 버튼을 눌러 테스트 코드를 실행 합니다.

테스트가 성공했다면 Test passed를 볼 수 있을 겁니다.

메인 메서드 실행해보기


메인 메서드에 실행 버튼을 눌러 실행을 해보면

톰캣 서버가 8080포트로 실행 되었다는 로그가 출력 되고,

브라우저에서도 hello가 잘 노출되는 것을 확인 할 수 있습니다.

profile
순간을 기록하는 개발자

0개의 댓글