본문 바로가기

Programming/Spring

[Spring Boot] JUnit5로 Controller 테스트 코드 작성하기

반응형

개발환경

  • IntelliJ
  • Java8(JDK 1.8)
  • Spring Boot 2.4.1
  • Gradle 7.1

자신이 작성한 Controller의 메소드가 제대로 작동이 되는지 간편하게 테스트 해보자.

 

test 디렉토리에 main 디렉토리와 동일한 패키지를 생성하여 테스트 컨트롤러 클래스를 생성한다.

본인은 HelloController를 생성했기에 HelloControllerTest 클래스를 생성했다.

 

HelloController.java

클래스에 hello() 메소드가 정의되어 있다.

 

HelloControllerTest.java

hello() 메소드를 테스트하기 위한 테스트 코드

참고로 테스트 클래스의 테스팅 라이브러리는 JUnit5를 사용한다.

따라서 JUnit5 기준으로 코드가 작성되었다. JUnit4와는 사용되는 어노테이션이 다르니 구분해서 사용해야 한다.

 

@ExtendWith(SpringExtension.class) JUnit5에서 반복적으로 실행되는 클래스나 메서드에 사용.
괄호 안에 인자로 확장할 Extension을 추가하여 사용한다.
SpringExtension은 Spring TextContext를 사용할 수 있도록 해준다.
@WebMvcTest(controllers = HelloController.class) 여러 스프링 테스트 어노테이션 중 Web(Spring MVC)에 집중할 수 있는 어노테이션.
특정 컨트롤러를 사용한다면 해당 컨트롤러를 선언한다.
@Autowired 스프링이 관리하는 빈(Bean)을 주입 받는다.
MockMvc 웹 API를 테스트 할 때 사용한다.
웹 애플리케이션을 애플리케이션 서버에 배포하지 않고도 스프링 MVC의 동작을 재현할 수 있는 클래스.
이 클래스를 통해 HTTP GET, POST 등에 대한 API 테스트를 할 수 있다.
mvc.perform(MockMvcRequestBuilders.get("/hello")) MockMvc를 통해 /hello 주소로 HTTP GET 요청을 한다.
체이닝(Chaining)이 지원되어 여러 검증 기능을 이어서 선언할 수 있다.
.andExpect(MockMvcResultMatchers.status().isOk()) mvc.perform의 결과를 검증한다.
HTTP Header의 Status를 검증한다.
해당 코드에서는 isOK, 즉 200인지 아닌지 검증한다.
.andExpect(MockMvcResultMatchers.content().string(hello)); mvc.perform의 결과를 검증한다.
응답 본문의 내용을 검증한다.
Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증한다.

 

테스트 코드 작성이 완료되었다면 아래 그림과 같이 테스트 코드를 실행해보자.

테스트 코드 작성대로 테스트 요구사항을 만족했다면 Test passed 문구가 나타난다.

반응형