반응형
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
- junit
- Visual Studio Code
- json
- IntelliJ
- CSS
- html
- js
- 자바문법
- 이클립스
- Eclipse
- java테스트
- 자바스크립트
- 인텔리제이
- 정규식
- list
- HashMap
- vscode
- Java
- math
- input
- string
- 문자열
- 자바
- ArrayList
- 테스트자동화
- Array
- javascript
- 배열
- junit5
- 단위테스트
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] TestInfo.getTestMethod()로 테스트 메소드 정보 확인하기 본문
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()를 사용하면 좋은 상황 요약
- 테스트 메서드 기반 로깅을 구현하고 싶을 때
- 특정 애노테이션이 붙은 테스트에만 별도 설정을 적용할 때
- 메서드 시그니처를 검토해 자동화된 테스트 도구를 만들고 싶을 때
- 테스트 시작 전/후에 메서드 단위 메타데이터를 활용해야 할 때
테스트 실행 중 메서드 정보를 활용하면 테스트 흐름을 더욱 세밀하게 제어할 수 있어, 규모가 커질수록 그 유용성이 크게 높아진다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] TestReporter에서 Map 기반 로그 기록하기 (0) | 2026.01.22 |
|---|---|
| [JUnit5] TestReporter.publishEntry()로 테스트 로그 남기기 (0) | 2026.01.22 |
| [JUnit5] TestInfo.getTestClass()로 테스트 클래스 정보 얻기 (0) | 2026.01.21 |
| [JUnit5] TestInfo.getTags()로 태그 메타데이터 조회하기 (0) | 2026.01.20 |
| [JUnit5] TestInfo.getDisplayName() 사용 가이드 (0) | 2026.01.20 |
Comments
