* 이 글은 이동욱 님이 집필하신 <스프링 부트와 AWS로 혼자 구현하는 웹 서비스>를 읽고 추가로 공부한 내용을 작성한 글입니다.
단위 테스트
단위 테스트란 테스트 주도 개발의 첫 번째 단계인, 기능 단위의 테스트 코드를 작성하는 것을 말한다.
단위 테스트를 통해 얻을 수 있는 이점으로는 아래와 같다.
- 개발 단계 초기에 문제 발견 / 빠른 피드백
- 웹 프로젝트에서 단위 테스트를 시행하지 않은 경우 서버를 재시작한 뒤(수십 초에서 1분 이상 소요) 테스트 도구를 통해 HTTP 요청을 진행한 뒤 출력 결과를 확인하는 과정을(System.out.println() 등) 반복해야 하지만, 단위 테스트를 시행한 경우 위와 같은 번거로운 작업을 굳이 하지 않아도 됨
- 코드 리팩토링, 라이브러리 업그레이드 등에 의한 변화에서 기존 기능이 잘 작동하는지 쉽게 확인 가능
- 기능에 대한 불확실성 감소
- 시스템에 대한 실제 문서 제공
JUnit
자바 프로젝트의 단위 테스트를 위한 프레임워크이다.
현재까지 JUnit 5까지 버전이 지원되고 있으며, JUnit 5를 의존성으로 추가하더라도 이전 버전 지원이 가능해 JUnit 4의 문법을 적용할 수 있다.
JUnit 5는 3가지 하위 프로젝트로 구성된다.
1. JUnit Platform
2. JUnit Jupiter
3. JUnit Vintage
이 중 JUnit Vintage에 JUnit 3, 4에서 사용하던 패키지가 그대로 존재하고, JUnit Jupiter를 통해 JUnit 5의 문법을 사용할 수 있다.
스프링 부트 의존성 중 spring-boot-starter-test에 포함되어 있어, 그레이들이나 메이븐으로 해당 의존성을 추가한 경우 JUnit에 대한 의존성을 추가하지 않아도 된다.
JUnit 4로 테스트 코드 작성
스프링 프로젝트에서 아래와 같은 컨트롤러가 있다고 가정해보자.
코드 내용을 보면 알 수 있듯, 해당 컨트롤러는 /hello 경로에 요청한 결과를 "hello"라는 문자열로 리턴한다.
// HelloController.java - src/main/java/메인패키지/web 디렉토리에 작성
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
컨트롤러가 잘 작동하는지 테스트해보고 싶을 땐 어떻게 해야 할까?
src/test/java 디렉토리에 컨트롤러가 작성된 패키지 구조와 대응되는 곳에 테스트 클래스를 생성하여 테스트 코드를 작성하면 된다.
즉, src/main/java/메인패키지/web의 HelloController를 테스트하고 싶으면 src/test/java/메인패키지/web에 테스트 클래스를 작성해야 한다는 이야기이다.
아래와 같이 테스트 클래스를 구현하면 그레이들을 통해 톰캣을 구동하지 않더라도 /hello를 요청한 결과를 테스트할 수 있다.
// HelloControllerTest.java - src/test/java/메인패키지/web 디렉토리에 작성
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다(){
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("hello"));
}
}
테스트 클래스는 @Test 어노테이션이 적용된 hello가_리턴된다 메소드를 실행한다.
MockMvc를 통해 애플리케이션을 서버에 배포하지 않고 "/hello" 경로에 GET 요청을 진행하고 결과값을 검증할 수 있다.
- status().isOk(): 응답의 상태 코드가 200 OK인지 검증
- content().string("hello"): 리스폰스 바디의 내용이 "hello"인지 검증
'백엔드 공부 메모 > 테스트 코드' 카테고리의 다른 글
AssertJ 간단 정리 (0) | 2024.03.30 |
---|---|
스프링 컨트롤러 단위 테스트 - MockMvc 클래스 소개, 작동 원리 (2) | 2024.03.27 |
JUnit 4 테스트 진행 과정, 스프링 부트 테스트용 어노테이션 (0) | 2024.03.23 |