Hello Controller 테스트 코드 작성하기
1장에서 만든 프로젝트로 패키지를 하나 생성해준다. new > package
일반적으로 pkg명은 웹 사이트 주소의 역순으로 한다. (com.zozos.book.springboot로 pkg명을 만들어주었다.)


만든 pkg안에 java class를 만들어주었다.

이름은 Application으로 생성해주었다.

클래스 코드는 아래와 같이 작성해주었다.
package com.zozos.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);
}
}
💡intelliJ에서 pkg가져오기
mac - option+enter
window/linux - alt+enter
Application class는 앞으로 만들 프로젝트의 main class가 된다.
@SpringBootApplication으로 인해 스프링부트의 자동설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정된다.
❗특히 @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에 항상 프로젝트 최상단에 위치해야만 한다.
main method에서 실행하는 springApplication.run으로 인해 내장 was(web application server)를 실행한다.
내장 was를 사용하면 항상 서버에 톰캣을 설치할 필요가 없게 되고, 스프링 부트로 만들어진 jar파일(실행 가능한 java pkg 파일)로 실행하면된다.
꼭 스프링부트에서만 was를 사용할 수 있는 것은 아니지만, 스프링부트에서는 내장 was를 사용하는 것을 권장하고 있다. 언제 어디서나 같은 환경에서 스프링부트를 배포할 수 있기 때문이다.
외장 was를 사용하면 보든 서버는 was의 종류와 버전, 설정을 일치시켜줘야하고. 새로운 서버가 추가되면 모든 서버가 같은 was환경을 구축해야한다. -> 내장 was를 사용하면 이 문제를 해결할 수 있다.
테스트를 위한 Controller르 만들어보자.
현재 패키지 하위에 web이란 패키지를 만들어준다.
web pkg안에 컨트롤러와 관련된 클래스들을 넣어주도록 하자. HelloController java class를 만들어주었다.


간단한 API를 만들어준다.
package com.zozos.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을 반환하는 컨트롤러로 만들어준다.
- 각 method마다 @ResponseBody를 선언했던 것을 한번에 사용할 수 있게 해준다고 생각하면 된다.
② GetMapping
- HTTP Method인 Get 요청을 받을 수 있는 API를 만들어 준다.
- 이제 이 프로젝트는 /hello로 요청이 오면 문자열 hello를 return 하는 기능을 가지게 되었다.
작성한 코드가 제대로 동작하는지 테스트를 하도록 하자.
was를 실행하지 않고, 테스트 코드로 검증을 해보자.
src/test/java dir에 앞에서 생성했던 pkg를 그대로 다시 생성한다.



package com.zozos.book.springboot;
import com.zozos.book.springboot.web.HelloController;
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.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
@RunWith(SpringRunner.class)//①
@WebMvcTest(controllers = HelloController.class) //②
public class HelloControllerTest {
@Autowired //③
private MockMvc mvc; //④
@Test
public void hello가_리턴된다() throws Exception{
String hello = "hello";
mvc.perform(get("/hello")) //⑤
.andExpect(status().isOk()) //⑥
.andExpect(content().string(hello)); //⑦
}
}
👉코드 설명
①RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다.
- 여기서 SpringRunner라는 스프링 실행자를 사용
- 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 한다.
②WebMvcTest
- 여러 스프링 테스트 어노테이션 중 web에 집중할 수 있는 어노테이션.
- @controller, @controlleradvice는 사용할 수 있다.
- @service, @component, @repository등은 사용할 수 없다.
- 지금은 컨트롤러만 사용하기때문에 선언한다.
③Autowired
- 스프링이 관리하는 bean을 주입 받는다.
④private MockMvc mvc
- 웹 API를 테스트할 떄 사용
- 스프링 MVC 테스트의 시작점
- HTTP GET, POST 등에 대한 API 테스트를 할 수 있다.
⑤mvc.perform(get("/hello"))
- MockMvc를 통해 /hello주소로 HTTP GET요청을 한다.
- 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언할 수 있다.
⑥.andExpect()
- mvc.perform의 결과를 검증한다.
status().isOk()
- HTTP Header의 status를 검증한다. (200, 404, 500 등 상태를 검증한다.)
- 여기선 OK(200)인지 아닌지 검증
⑦ content().string(hello)
- 응답 본문의 내용을 검증한다.
- controller에서 hello를 return하기 떄문에 값이 맞는지 확인
작성한 테스트 코드를 실행해보자.
method의 왼쪽에 화살표를 클릭해서 Run을 실행시켜보면


다음과 같이 테스트가 통과하는 것을 확인할 수 있다.
우리가 검증용으로 선언했던 .andExpect(status().isOk())과 .andExpect(content().string(hello)); 모두 통과했음을 의미한다.

수동으로도 실행해서 정상적으로 값이 출력되는지 확인해보자.
Application.java파일로 이동해서 마찬가지고 main method 왼쪽 화살표를 눌러 Run을 실행시켜준다.


톰캣 서버가 8080포트로 실행되었다는 것도 로그에 출력된다.

실행이 됐다면, 웹 브라우저를 열어 localhost:8080/hello로 접속하면 다음과 같이 화면에 hello문자열이 나오는 것을 확인할 수 있다.

'Dev' 카테고리의 다른 글
| 롬복 소개 및 설치하기 (0) | 2023.09.14 |
|---|---|
| 스프링 부트에서 테스트 코드를 작성하자 (1) | 2023.09.07 |
| [GitHub] GitHub ReadMe 꾸미기 (0) | 2023.07.22 |
| 인텔리제이에서 깃과 깃허브 사용하기 (0) | 2023.07.20 |
| Gradle 프로젝트를 Spring boot 프로젝트로 변경하기 (0) | 2023.07.18 |