Spring Boot에서 테스트코드 작성하기

janeljs·2020년 12월 19일
3
post-thumbnail

이 시리즈는 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 공부한 내용을 정리하는 용도로 작성되었습니다.

단위 테스트(Unit Test)

기능 단위의 테스트 코드를 작성하는 것

단위 테스트의 장점

  • 개발 단계 초기에 문제를 발견하게 도와준다.
  • 개발자가 리팩토링, 라이브러리 업그레이드 등을 할 때 기존 기능이 올바르게 작동하는지 확인할 수 있다.
  • 기능에 대한 불확실성을 감소시킬 수 있다.
  • 시스템에 대한 실제 문서를 제공한다. 즉, 단위 테스트 자체를 문서로 사용할 수 있다.

xUnit

테스트 코드 작성을 도와주는 프레임워크

  • Junit - Java
  • DBUnit - DB
  • CppUnit - C++
  • NUnit - .net

Application 클래스(메인 클래스)

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

@SpringBootApplication // 프로젝트 최상단에 위치
public class Application {
    public static void main(String[] args) {
    	// 내장 WAS 실행
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication

  • 스프링 Bean 읽기와 생성이 자동으로 설정된다.

내장 WAS(Web Application Server)

  • 별도로 외부에 WAS를 두지 않고 Application을 실행할 때 내부에서 WAS를 실행하는 것
    → 내장 WAS를 사용하면 서버에 Tomcat을 설치하지 않아도 스프링 부트로 만들어진 Jar 파일로 실행할 수 있다.
    → 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있다.

Alt + Enter : Import package


HelloController 클래스

@RestController
public class HelloController {

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

@RestController

  • 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 준다.

@GetMapping

  • HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 준다.
    /hello 요청이 오면 문자열 hello를 반환

HelloControllerTest 클래스

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

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

	// MockMvc를 통해 /hello 주소로 HTTP GET 요청
        // 체이닝 지원으로 여러 검증 기능 이어서 선언 가능
        mvc.perform(get("/hello")) 
        	// mvc.perform의 결과 검증
                .andExpect(status().isOk()) // HTTP Header의 Status가 OK(200)인지 검증
                .andExpect(content().string(hello)); // 응답 본문의 내용 검증
    }
}

@RunWith(SpringRunner.class)

  • 테스트를 진행할 때 JUnit에 내장되지 않은 실행자를 실행시킨다.
    → SpringRunner(스프링 실행자)를 실행시켜 스프링 부트 테스트와 Junit 사이를 연결

@WebMvcTest

  • Web(Spring MVC)에 집중할 수 있는 스프링 테스트 어노테이션

    사용 가능사용 불가
    @Controller, @ControllerAdvice@Service, @Component, @Repository

@AutoWired

  • 스프링이 관리하는 Bean을 주입받는다.

private MockMvc mvc

  • 실제 객체와 비슷하지만 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 애플리케이션 서버에 배포하지 않고도 스프링 MVC 동작을 재현할 수 있는 클래스
  • 웹 API를 테스트할 때 사용 (HTTP GET, POST)
  • 스프링 MVC 테스트의 시작점

0개의 댓글