반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 인텔리제이
- html
- Visual Studio Code
- ArrayList
- java테스트
- 문자열
- list
- 배열
- Java
- IntelliJ
- js
- 이클립스
- 자바스크립트
- 테스트자동화
- junit5
- json
- 자바문법
- 단위테스트
- HashMap
- 정규식
- math
- vscode
- 자바
- CSS
- input
- junit
- javascript
- Array
- string
- Eclipse
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] ExtensionContext.getDisplayName() 활용법 본문
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이다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] ExtensionContext.getTestClass()로 테스트 클래스 접근하기 (0) | 2026.01.25 |
|---|---|
| [JUnit5] AfterEachCallback.afterEach() 실행 흐름 정리 (0) | 2026.01.24 |
| [JUnit5] BeforeEachCallback.beforeEach() 실행 흐름 이해 (0) | 2026.01.24 |
| [JUnit5] dynamicContainer()로 테스트 그룹 구성하기 (0) | 2026.01.23 |
| [JUnit5] dynamicTest()로 동적 테스트 정의하기 (0) | 2026.01.23 |
Comments
