본문으로 바로가기

[SpringBoot] 2. 테스트 코드 작성해보기

category Web/SpringBoot 2020. 2. 10. 21:08
더보기

<스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱> 책을 활용해

공부한 내용을 정리할 예정입니다.


1. Application 클래스 생성

 

Main/Java디렉토리에서 오른쪽버튼 클릭 >New>Package를 선택해 패키지를 생성합니다.

 

일반적으로 패키지명은 웹 사이트 주소의 역순으로 합니다.

저는 Group Id와 프로젝트명을 합쳐서 com.hyemcomi.springboot로 만들었습니다.

패키지 이름

패키지 아래 Application이라는 이름의 java클래스를 생성합니다.

package com.hyemcomi.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);	// 내장 WAS실행
    }
}

Application 클래스는 앞으로 만들어질 프로젝트의 메인 클래스입니다.

@SpringBootApplication로 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성이 모두 자동으로 설정 됩니다.

특히, @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에

Application 클래스는 항상 프로젝트 최상단에 위치해야 합니다.

 

내장 WAS(Web Application Server)를 사용하면 톰캣을 설치할 필요가 없고,
스프링 부트로 만들어진 Jar파일로 실행하면 됩니다.

WAS를 사용하면 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있기 때문에

스프링 부트에서는 내장 WAS 사용을 권장하고 있습니다.

 

2. Controller 만들기

위에서 생성한 com.hyemcomi.springboot 패키지에 web이라는 패키지를 만들어 줍니다.

컨트롤러와 관련된 클래스들은 모두 web 패키지 안에 담습니다.

 

web패키지 안에 HelloController라는 클래스를 생성합니다.

HelloController 위치

간단한 API를 만듭니다.

package com.hyemcomi.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
    : http Get 요청을 받을 수 있는 API를 만들어 줌

위의 코드는 /hello로 요청이 오면 hello를 반환하는 기능을 만든 것 입니다.

3. 테스트 코드 작성

WAS를 실행하지 않고, 테스트 코드로 검증합니다.

src/test/java디렉토리에 main에서 생성했던 패키지를 동일하게 생성해줍니다.

그리고 테스트 코드를 작성할 클래스를 생성합니다.

일반적으로 테스트 클래스 대상 클래스 이름+Test라고 씁니다.

HelloControllerTest 위치

package com.hyemcomi.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 org.springframework.test.web.servlet.ResultActions;

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
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc; // 이 클래스를 활용해서 HTTP GET, POST 등에 대한 API테스트를 할 수 있음

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

	// 체이닝이 가능
        mvc.perform(get("/hello"))
                .andExpect(status().isOk())		// HTTP Header status 검증
                .andExpect(content().string(hello));	// 결과 검증, 응답 본문의 내용을 검증
    }
}
  • @RunWith(SpringRunner.class)
    : 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다.
     여기선 SpringRunner라는 스프링 실행자를 사용
     스프링 부트 테스트와 JUnit사이에 연결자 역할
  • @WebMvcTest
    : 여러 스프링 테스트 어노테이션 중 Web에 집중할 수 있는 어노테이션이다.
     여기선 컨트롤러만 사용하기 때문에 이걸 활용!
  • @Autowired
    : 스프링이 관리하는 빈 주입 받음

테스트 메소드 실행 버튼
테스트 메소드 실행 결과

테스트가 성공한 것을 볼 수있다.

4. Main 실행 및 최종 확인

메인 메소드를 실행하면 아래와 같은 로그 화면을 볼 수 있다.

메인 메소드 실행 로그

실행하고 localhost:8080/hello 를 실행하면 아래와 같은 화면을 확인할 수 있다.

실행 화면