반응형
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
- 자바문법
- Visual Studio Code
- json
- java테스트
- list
- 단위테스트
- IntelliJ
- js
- CSS
- javascript
- input
- Eclipse
- 이클립스
- Java
- 자바
- 인텔리제이
- 문자열
- junit
- 배열
- 테스트자동화
- math
- 자바스크립트
- ArrayList
- vscode
- 정규식
- HashMap
- html
- string
- junit5
- Array
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] TestInfo로 테스트 메타데이터 활용하기 본문
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 사용 시 주의할 점
- 파라미터로 직접 주입해야 한다
- 필드 주입은 불가능하며, 메서드 파라미터에서만 사용 가능
- Optional 값 처리 필요
- TestClass, TestMethod는 Optional 형태
- BeforeAll 등 클래스 레벨 훅에서는 TestMethod를 사용할 수 없음
- @DisplayName이 있는 경우 표시 이름이 바뀜
- 표시 이름을 로깅할 때 메서드명과 다를 수 있으므로 문맥에 맞게 선택해야 함
- JUnit4의 TestName Rule과는 완전히 다른 구조
- TestInfo는 파라미터 기반 주입이므로 더 유연하고 함수형 스타일에 적합
7. 정리
- JUnit5의 TestInfo는 테스트 실행 중 메타데이터를 제공하는 강력한 도구
- 테스트 이름, 표시 이름, 태그, 실행 대상 클래스/메서드를 쉽게 확인 가능
- BeforeEach/BeforeAll에서 활용하면 테스트 로깅 및 문서화에 매우 유용
- Optional 기반이므로 상황에 맞게 안전하게 처리할 필요 있음
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] DynamicTest로 동적 테스트 생성하기 (0) | 2026.01.16 |
|---|---|
| [JUnit5] TestReporter로 테스트 실행 정보 기록하기 (0) | 2026.01.16 |
| [JUnit5] Assumptions로 조건부 테스트 실행하는 방법 (0) | 2026.01.15 |
| [JUnit] setName() – 테스트 이름 변경하기 (0) | 2026.01.14 |
| [JUnit] getName() – 테스트 이름 가져오기 (0) | 2026.01.14 |
Comments
