이 글은 Practical Testing: 실용적인 테스트 가이드 를 참조하였습니다.
1. @DisplayName 이란?
Junit5 부터 사용할 수 있는 기능으로, 테스트 메소드나 테스트 클래스에 사람이 읽기 쉬운 이름을 지정하는 어노테이션이다. 이 어노테이션을 사용하면 테스트 실행 시, 메소드 이름 대신 지정한 설명을 출력하여 테스트의 목적이나 의미를 명확히 알 수 있다. 특히 테스트의 가독성을 높이고, 무엇을 테스트하고 있는지 쉽게 파악할 수 있도록 도와준다.
2. @DisplayName 사용법
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
class MyTests {
@Test
@DisplayName("입력값이 짝수라면 true 를 return 해야 한다.")
void testEvenNumber() {
// 테스트 코드
}
}
3. @DisplayName을 잘 사용하려면?
@DisplayName은 사람이 읽기 쉽도록 하는 것이 목적이다. 이 목적을 잊지 않아야 한다. 그렇다면, 효과적으로 @DisplayName을 사용하려면 어떻게 해야 할까?
3 - 1. 명사의 나열보다는 문장으로
음료 1개 추가 테스트. (X)
음료 1개를 추가할 수 있다. (O)
위 문장보다는 아래 문장이 훨씬 좋은 @DisplayName 작성이다.
"~~테스트" 와 같은 형태의 @DisplayName은 지양하자.
3 - 2. 테스트 행위에 대한 결과까지 기술하기
음료를 1개 추가할 수 있다. (X)
음료를 1개 추가하면 주문 목록에 담긴다. (O)
더 나아가 "음료를 1개 추가하면 주문 목록에 담긴다." 처럼 어떤 행위를 한 후 어떤 결과가 도출됨을 나타내면 더욱 좋다.
3 - 3. 도메인 용어를 사용하자.
특정 시간 이전에 주문하면 주문 생성에 실패한다. (X)
영업 시간 이전에 주문하면 주문 생성을 할 수 없다. (O)
"특정 시간" 보다 "영업 시간" 이라는 용어를 사용하면 도메인을 이해하는 데 쉬워진다. 되도록 도메인 용어를 사용하자.
그리고, 테스트의 현상을 기술하는 것은 지양하자. "실패한다." 보다 "주문 생성을 할 수 없다."가 더욱 나은 표현이다.
3 - 4. BDD 스타일로 테스트 작성하기
Behavior-Driven Development(BDD)는 소프트웨어의 기능을 행동(Behavior) 중심으로 설명하는 방식의 개발 기법이다. 이는 기술적 세부 사항보다는 사용자가 기대하는 동작에 초점을 맞추기 때문에, 테스트 코드 역시 애플리케이션의 특정 행동을 자연스러운 문장으로 설명할 수 있게 해준다. BDD 스타일로 테스트를 작성하면 @DisplayName 작성에도 큰 도움이 된다. 테스트 메소드 자체가 행동 중심으로 작성되므로, @DisplayName을 통해 테스트 의도를 더 명확하게 서술하기가 쉬워진다.
BDD 스타일에서는 Given-When-Then 형식으로 테스트 시나리오를 작성한다.
- Given: 어떤 상황이 주어졌을 때
- When: 특정 행동이 발생하면
- Then: 예상되는 결과가 나타나야 한다
@Test
@DisplayName("유효한 사용자 자격 증명이 주어졌을 때 로그인 시도가 발생하면 성공적으로 로그인 되어야 한다.")
void shouldLoginSuccessfullyWithValidCredentials() {
// Given: 유효한 사용자 자격 증명이 주어졌을 때
User user = new User("username", "password");
UserService userService = new UserService();
// When: 로그인 시도가 발생하면
boolean result = userService.login(user);
// Then: 사용자가 성공적으로 로그인되어야 한다
assertTrue(result);
}
이 형식을 활용하면 테스트의 흐름이 자연스럽게 드러나고, 이를 기반으로 @DisplayName을 사용하여 가독성이 뛰어난 설명을 덧붙일 수 있다.
4. 마무리
@DisplayName은 단순한 어노테이션을 넘어, 테스트 코드의 가독성을 높이고 의도를 명확히 전달하는 강력한 도구다. 테스트의 목적이 잘 드러나도록 설명을 추가함으로써 코드 리뷰, 유지 보수, 팀 협업에 큰 이점을 가져다준다.
@DisplayName을 잘 사용하기 위해서는 다음의 원칙을 기억해야 합니다:
- 테스트 의도를 분명하게 표현하고, 문장을 사용하는 것
- 테스트의 결과까지 기술하여 읽는 이가 쉽게 이해할 수 있도록 하는 것
- 도메인 용어를 사용하는 것
- 테스트의 현상을 중점적으로 기술하지 말 것.
- BDD 스타일을 도입해 자연스럽게 "Given-When-Then" 흐름을 따르는 설명을 붙이는 것
이러한 점들을 고려하여 @DisplayName를 작성한다면, 테스트 코드는 단순한 코드가 아닌 비즈니스 로직을 설명하는 문서로서의 역할을 하게 될 것이다. @DisplayName을 통해 테스트 코드도 보다 섬세하고 명확하게 표현될 수 있다는 점을 잊지 말고, 더 나은 코드 작성 습관을 기르길 바란다.
'테스트 > Junit' 카테고리의 다른 글
[Junit] 테스트 코드에 example data 를 생성하는 4가지 방법 (0) | 2024.03.24 |
---|---|
[Junit] Spring Boot 에서 Repository 테스트 하기 (0) | 2024.03.04 |