[Junit] DisplayName을 섬세하게

2024. 10. 21. 17:45· 테스트/Junit
목차
  1. 1. @DisplayName 이란?
  2. 2. @DisplayName 사용법
  3. 3. @DisplayName을 잘 사용하려면?
  4. 3 - 1. 명사의 나열보다는 문장으로
  5. 3 - 2. 테스트 행위에 대한 결과까지 기술하기
  6. 3 - 3. 도메인 용어를 사용하자.
  7. 3 - 4. BDD 스타일로 테스트 작성하기
  8. 4. 마무리
이 글은 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
  1. 1. @DisplayName 이란?
  2. 2. @DisplayName 사용법
  3. 3. @DisplayName을 잘 사용하려면?
  4. 3 - 1. 명사의 나열보다는 문장으로
  5. 3 - 2. 테스트 행위에 대한 결과까지 기술하기
  6. 3 - 3. 도메인 용어를 사용하자.
  7. 3 - 4. BDD 스타일로 테스트 작성하기
  8. 4. 마무리
'테스트/Junit' 카테고리의 다른 글
  • [Junit] 테스트 코드에 example data 를 생성하는 4가지 방법
  • [Junit] Spring Boot 에서 Repository 테스트 하기
Griotold
Griotold
Griotold
Griotold's Olive Oil
Griotold
전체
오늘
어제
  • 분류 전체보기 (90) N
    • 테스트 (4)
      • Spock (1)
      • Junit (3)
    • 디자인 패턴 (1)
    • 깃 (2)
    • 리팩토링 (4)
    • 항해플러스 백엔드 5기 (3)
    • 인프런 워밍업 클럽 스터디 2기 백엔드 (4)
    • 코딩테스트 (10)
    • 자바 심화 2기 (7)
    • 백엔드 면접 질문 (19)
    • 인프라 (17)
      • docker (5)
      • CI, CD (5)
      • Monitoring (6)
      • AWS (1)
    • 데이터베이스 (1)
      • Redis (1)
    • 메시지큐 (3)
      • rabbitMQ (0)
      • kafka (3)
    • MSA (7)
    • JPA (1)
    • Spring (5)
      • Spring AI (1)
    • GraphQL (1) N

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • grafana
  • 읽기좋은코드
  • micrometer
  • CICD
  • 티스토리챌린지
  • DATABASE
  • JPA
  • 배포
  • Spring
  • githubactions
  • MSA
  • github
  • 항해99
  • 개발자취업
  • 99클럽
  • junit5
  • TIL
  • 백엔드
  • 백준
  • 이분탐색
  • 오블완
  • prometheus
  • actuator
  • 자바
  • 프로그래머스
  • backend
  • 리팩터링
  • java
  • docker
  • 코딩테스트준비

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Griotold
[Junit] DisplayName을 섬세하게
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.