어제 오늘 내일

[JUnit5] TestInfo로 테스트 메타데이터 활용하기 본문

IT/JUnit

[JUnit5] TestInfo로 테스트 메타데이터 활용하기

hi.anna 2026. 1. 15. 08:19

JUnit5에서는 테스트 실행 중에 테스트 이름, 표시 이름, 태그, 테스트 클래스/메서드 정보 등 다양한 메타데이터를 활용할 수 있도록 TestInfo API를 제공합니다.
특히 테스트 문서화, 로그 관리, 공통 준비 코드에서 테스트 정보를 확인해야 할 때 매우 유용합니다.

아래에서는 TestInfo의 특징과 활용 방법을 단계별로 정리합니다.

 

1. TestInfo란?

TestInfo는 JUnit5가 테스트 실행 시 자동 제공하는 테스트 정보 컨텍스트 객체입니다.

주요 기능

  • 테스트 메서드/클래스 정보 가져오기
  • 테스트 표시 이름(DisplayName) 조회
  • 테스트에 적용된 태그(Tags) 조회
  • BeforeEach/BeforeAll에서 현재 실행되는 테스트 정보 활용

테스트 대상 메서드에 파라미터로 선언하기만 하면 자동 주입됩니다.

예:

void testSomething(TestInfo testInfo) { ... }

 

2. TestInfo 기본 사용 예제

가장 기본적인 TestInfo 사용 방식은 테스트 이름과 표시 이름을 출력하는 것입니다.

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import static org.junit.jupiter.api.Assertions.*;

class TestInfoBasicTest {

    @DisplayName("더하기 기능 테스트")
    @Test
    void addTest(TestInfo testInfo) {
        System.out.println("메서드명: " + testInfo.getTestMethod().get().getName());
        System.out.println("표시 이름: " + testInfo.getDisplayName());

        assertEquals(5, 2 + 3);
    }
}

설명

  • getTestMethod()는 Optional로 반환되며 실제 테스트 메서드 객체를 제공
  • getDisplayName()은 @DisplayName 값 또는 메서드명을 표시

 

3. BeforeEach에서 TestInfo 활용하기

테스트 실행 전에 공통 로그를 남기고 싶을 때 유용합니다.

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInfo;

class LoggingTest {

    @BeforeEach
    void before(TestInfo testInfo) {
        System.out.println("[실행 준비] " + testInfo.getDisplayName());
    }
}

특징

  • BeforeEach에서도 TestInfo를 사용할 수 있음
  • 어떤 테스트가 시작되는지 공통 로깅 가능

 

4. 태그(Tag) 메타데이터 조회하기

특정 테스트가 어떤 그룹(Tag)에 속하는지 확인할 수 있습니다.

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;

class TagInfoTest {

    @Tag("fast")
    @Test
    void fastTest(TestInfo testInfo) {
        System.out.println("태그: " + testInfo.getTags());
    }
}

설명

  • getTags()는 Set 형태로 태그 목록 반환
  • 테스트 실행 중 환경별로 태그 기반 처리 가능

 

5. 테스트 클래스 및 테스트 메서드 정보 활용

TestInfo는 테스트가 속한 테스트 클래스와 메서드 정보를 직접 조회할 수 있습니다.

@Test
void testMeta(TestInfo testInfo) {
    System.out.println("테스트 클래스: " + testInfo.getTestClass().get().getSimpleName());
    System.out.println("테스트 메서드: " + testInfo.getTestMethod().get().getName());
}

활용 예

  • 테스트 메타데이터 기반 동적 로깅
  • 테스트 클래스별 문서 생성
  • 테스트 이름 규칙 검증

 

6. TestInfo 사용 시 주의할 점

  1. 파라미터로 직접 주입해야 한다
    • 필드 주입은 불가능하며, 메서드 파라미터에서만 사용 가능
  2. Optional 값 처리 필요
    • TestClass, TestMethod는 Optional 형태
    • BeforeAll 등 클래스 레벨 훅에서는 TestMethod를 사용할 수 없음
  3. @DisplayName이 있는 경우 표시 이름이 바뀜
    • 표시 이름을 로깅할 때 메서드명과 다를 수 있으므로 문맥에 맞게 선택해야 함
  4. JUnit4의 TestName Rule과는 완전히 다른 구조
    • TestInfo는 파라미터 기반 주입이므로 더 유연하고 함수형 스타일에 적합

 

7. 정리

  • JUnit5의 TestInfo는 테스트 실행 중 메타데이터를 제공하는 강력한 도구
  • 테스트 이름, 표시 이름, 태그, 실행 대상 클래스/메서드를 쉽게 확인 가능
  • BeforeEach/BeforeAll에서 활용하면 테스트 로깅 및 문서화에 매우 유용
  • Optional 기반이므로 상황에 맞게 안전하게 처리할 필요 있음

 

반응형
Comments