어제 오늘 내일

[JUnit5] ExtensionContext.getDisplayName() 활용법 본문

IT/JUnit

[JUnit5] ExtensionContext.getDisplayName() 활용법

hi.anna 2026. 1. 25. 01:17

1. ExtensionContext.getDisplayName()란 무엇인가

ExtensionContext.getDisplayName()은 JUnit5 확장 API에서 제공하는 메서드로,
현재 실행 중인 테스트 또는 컨테이너에 설정된 표시용 이름(Display Name) 을 조회할 수 있다.

이 값은 다음과 같은 경우에 달라질 수 있다.

  • 테스트 메서드 또는 클래스에 @DisplayName이 선언된 경우
  • 기본적으로는 메서드명이나 클래스명이 표시됨
  • 동적 테스트나 컨테이너에서는 생성 시 지정한 이름

확장에서 테스트 흐름을 로깅하거나 테스트 식별을 위해 매우 유용한 API다.

 

2. 기본 사용 예제

import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

public class DisplayNameExtension implements BeforeEachCallback {

    @Override
    public void beforeEach(ExtensionContext context) {
        String displayName = context.getDisplayName();
        System.out.println("[BeforeEach] DisplayName = " + displayName);
    }
}

설명

  • 확장은 @BeforeEach, @AfterEach 등 라이프사이클 콜백에서 ExtensionContext를 통해 DisplayName을 확인할 수 있다.
  • 실제 테스트 이름과 사람이 읽기 쉬운 이름을 같이 관리할 때 유용하다.

 

3. @DisplayName과 함께 사용하기

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(DisplayNameExtension.class)
class DisplayNameTest {

    @Test
    @DisplayName("사용자 로그인 성공 케이스")
    void loginTest() {}
}

출력 예:

[BeforeEach] DisplayName = 사용자 로그인 성공 케이스

즉, 메서드 이름이 아닌 사람이 읽기 좋은 커스텀 명칭을 그대로 가져온다.

 

4. @DisplayName이 없을 때의 동작

@Test
void noDisplayName(TestInfo testInfo) {}

확장에서 가져온 값:

noDisplayName(TestInfo)

설명

  • 메서드명을 기반으로 displayName이 구성된다.
  • 테스트 식별용으로 충분히 유효하다.

 

5. 동적 테스트(DynamicTest)에서의 displayName 값

dynamicTest()에서 제공한 이름이 그대로 표시된다.

@TestFactory
Collection<DynamicTest> dynamicTests() {
    return List.of(
        dynamicTest("1 + 1 테스트", () -> assertEquals(2, 1 + 1)),
        dynamicTest("문자열 길이 체크", () -> assertEquals(5, "hello".length()))
    );
}

확장에서 얻는 값 예:

1 + 1 테스트
문자열 길이 체크

활용 포인트

  • 자동 생성되는 동적 테스트도 사람이 이해할 수 있는 이름을 가지므로, 확장에서 로깅하기 좋음.

 

6. 컨테이너(DisplayName 포함)에서도 사용 가능

@Nested, 동적 컨테이너 등 모든 테스트 컨테이너에서도 DisplayName을 조회할 수 있다.

@Nested
@DisplayName("회원 도메인 테스트")
class MemberTests {

    @Test
    @DisplayName("회원 생성 성공")
    void createMember() {}
}

확장 콜백에서 출력될 값 예:

회원 도메인 테스트
회원 생성 성공

 

 

7. getDisplayName()을 활용한 대표 패턴

✔ 테스트 실행 로그를 보기 좋게 만들기

@Override
public void beforeEach(ExtensionContext context) {
    System.out.println("[START] " + context.getDisplayName());
}

✔ 테스트 실패 상황에서 DisplayName 기반 알람/전송 처리

@Override
public void afterEach(ExtensionContext context) {
    if (context.getExecutionException().isPresent()) {
        System.out.println("⚠ 실패한 테스트: " + context.getDisplayName());
    }
}

✔ 테스트 보고서를 사람이 읽기 좋은 형태로 전환

DisplayName을 활용해 카테고리화 가능.

✔ 커스텀 애노테이션 기반으로 DisplayName을 활용한 조건 처리

테스트 종류를 구분하는 지표로 사용 가능.

 

8. getDisplayName() 사용 결과 정리

상황  반환 값
@DisplayName 있음 해당 문자열
@DisplayName 없음 메서드명 또는 클래스명
동적 테스트 생성 시 지정한 이름
컨테이너(동적 포함) 컨테이너 표시 이름

 

📌 ExtensionContext.getDisplayName()는 이런 상황에 유용

  • 테스트 실행 시작/종료를 사람이 읽기 쉬운 이름으로 로깅해야 할 때
  • 테스트 실패 알림을 의미 있게 전달하고 싶을 때
  • 동적 테스트를 포함하여 복잡한 테스트 구조를 관리할 때
  • 테스트 리포트를 자연어 기반으로 구성해야 할 때

확장 기반 테스트 환경을 만든다면 getDisplayName()은 매우 자주 사용되는 핵심 메타데이터 API이다.

 

반응형
Comments