어제 오늘 내일

[JUnit5] TestInfo.getTestMethod()로 테스트 메소드 정보 확인하기 본문

IT/JUnit

[JUnit5] TestInfo.getTestMethod()로 테스트 메소드 정보 확인하기

hi.anna 2026. 1. 21. 08:02

1. getTestMethod()란 무엇인가

TestInfo.getTestMethod()는 현재 실행 중인 테스트 메서드 정보를 Optional 형태로 제공하는 JUnit5의 메타데이터 API이다.
이를 통해 테스트 코드 내에서 메서드 이름, 파라미터, 애노테이션 등을 직접 확인할 수 있어 로깅·조건 처리·리플렉션 기반 테스트 설정에 적극 활용할 수 있다.

Optional 형태이므로 안전한 접근이 필요하며, TestInfo는 테스트 메서드, @BeforeEach, @AfterEach 등에도 주입 가능하다.

 

2. 기본 사용 예제

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

class TestMethodInfoExample {

    @Test
    void sampleTest(TestInfo testInfo) {
        System.out.println("테스트 메서드: " + testInfo.getTestMethod());
    }
}

설명

  • 출력값은 Optional[void sampleTest(TestInfo)] 같은 형태로 표시된다.
  • Optional이기 때문에 값이 없을 수 있으므로 map, orElse 등을 사용해 안정적으로 처리해야 한다.

 

3. 메서드 이름만 추출하기

@Test
void printMethodName(TestInfo testInfo) {
    String methodName = testInfo.getTestMethod()
                                .map(method -> method.getName())
                                .orElse("UnknownMethod");

    System.out.println("현재 테스트 메서드명: " + methodName);
}

설명

  • method.getName()으로 메서드 이름만 가져온다.
  • orElse로 기본값 처리 가능.

 

4. 메서드 애노테이션 확인하기

테스트 메서드에 특정 애노테이션이 있을 때만 로직을 수행하는 패턴이다.

import org.junit.jupiter.api.DisplayName;

@Test
@DisplayName("주문 생성 확인")
void testWithAnnotation(TestInfo testInfo) {
    testInfo.getTestMethod().ifPresent(method -> {
        if (method.isAnnotationPresent(DisplayName.class)) {
            DisplayName dn = method.getAnnotation(DisplayName.class);
            System.out.println("디스플레이 네임: " + dn.value());
        }
    });
}

활용 포인트

  • 테스트 이름 기반 로직 제어
  • 커스텀 애노테이션 기반 설정 자동화
  • 조건부 테스트 분기 처리

 

5. 리플렉션을 이용해 메서드 파라미터 정보 확인하기

테스트 메서드가 어떤 인자를 받고 있는지 동적으로 확인할 수 있다.

@Test
void checkMethodParameters(TestInfo testInfo) {
    testInfo.getTestMethod().ifPresent(method -> {
        Arrays.stream(method.getParameters())
              .forEach(param -> System.out.println("파라미터: " + param.getType()));
    });
}

설명

  • 메서드 시그니처 기반 분석이 가능해 테스트 자동화, 코드 분석 도구 등에 유용하다.

 

6. @BeforeEach에서 테스트 메서드 이름 출력하기

각 테스트 시작 전마다 어떤 테스트가 실행되는지 로깅할 수 있다.

import org.junit.jupiter.api.BeforeEach;

class MethodLevelLoggingTest {

    @BeforeEach
    void setup(TestInfo testInfo) {
        String methodName = testInfo.getTestMethod()
                                    .map(Method::getName)
                                    .orElse("UnknownMethod");
        System.out.println(">>> 실행 준비: " + methodName);
    }

    @Test
    void one() {}

    @Test
    void two() {}
}

설명

  • 테스트 실행 순서를 확인하거나 디버깅 시 유용하다.
  • 여러 테스트 파일이 있는 프로젝트에서 공통 패턴으로 자주 사용된다.

 

7. TestInfo.getTestMethod()를 사용하면 좋은 상황 요약

  • 테스트 메서드 기반 로깅을 구현하고 싶을 때
  • 특정 애노테이션이 붙은 테스트에만 별도 설정을 적용할 때
  • 메서드 시그니처를 검토해 자동화된 테스트 도구를 만들고 싶을 때
  • 테스트 시작 전/후에 메서드 단위 메타데이터를 활용해야 할 때

테스트 실행 중 메서드 정보를 활용하면 테스트 흐름을 더욱 세밀하게 제어할 수 있어, 규모가 커질수록 그 유용성이 크게 높아진다.

 

 

반응형
Comments