반응형
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
- list
- 단위테스트
- Java
- string
- input
- Visual Studio Code
- 인텔리제이
- junit5
- Array
- js
- 테스트자동화
- javascript
- java테스트
- CSS
- 이클립스
- ArrayList
- 문자열
- 배열
- json
- 자바
- html
- HashMap
- Eclipse
- 자바스크립트
- junit
- math
- 자바문법
- IntelliJ
- 정규식
- vscode
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] TestReporter로 테스트 실행 정보 기록하기 본문
JUnit5에서는 테스트 실행 중 키–값 형태의 실행 정보를 기록할 수 있도록 TestReporter API를 제공합니다.
테스트 로그를 구조화하거나, 테스트 실행 맥락(context)을 기록하고 싶을 때 매우 유용한 도구입니다.
아래에서는 TestReporter의 특징, 사용 방법, 실전 예제를 단계별로 정리합니다.
1. TestReporter란?
TestReporter는 JUnit5가 제공하는 테스트 실행 정보 리포팅 인터페이스입니다.
JUnit 플랫폼에 테스트 데이터를 전달하면, IDE·콘솔·리포터(예: Gradle, Maven Surefire)가 이를 받아 적절히 출력합니다.
주요 특징
- 테스트 실행 중 구조적(key-value) 로그를 남길 수 있음
- 단순 출력이 아니라 테스트 리포터 시스템에 기록됨
- TestInfo처럼 파라미터로 자동 주입받아 사용
주요 메서드
- publishEntry(String key, String value)
- publishEntry(Map<String, String> values)
2. 기본 사용 예제 – 단일 키-값 출력하기
가장 간단한 예제는 테스트 중 특정 정보를 기록하는 것입니다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestReporter;
class TestReporterBasicTest {
@Test
void reportBasicInfo(TestReporter reporter) {
reporter.publishEntry("status", "started");
reporter.publishEntry("step", "data loaded");
reporter.publishEntry("result", "success");
}
}
설명
- TestReporter는 테스트 실행 중 자동 제공됨
- publishEntry로 남긴 정보는 IDE나 빌드 로그에 구조적으로 기록됨
3. 여러 값을 한 번에 전달하기
키–값 여러 개를 한 번에 넘기면 더 깔끔하게 실행 정보를 묶어서 기록할 수 있습니다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestReporter;
import java.util.Map;
class TestReporterMapTest {
@Test
void reportMultipleData(TestReporter reporter) {
reporter.publishEntry(Map.of(
"scenario", "user signup",
"step", "email verification",
"status", "pending"
));
}
}
설명
- 여러 값이 하나의 엔트리로 기록되기 때문에 시나리오 테스트에 특히 유용
4. TestReporter를 BeforeEach와 함께 사용하기
각 테스트가 시작될 때 공통 메타데이터를 기록하는 방식도 가능합니다.
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestReporter;
class TestReporterLifecycleTest {
@BeforeEach
void before(TestReporter reporter) {
reporter.publishEntry("event", "test starting");
}
@Test
void sampleTest(TestReporter reporter) {
reporter.publishEntry("action", "running sampleTest");
}
}
설명
- 모든 테스트 실행 전에 "test starting" 이벤트가 기록됨
- 테스트 로그 분석 시 매우 유용
5. TestInfo와 함께 활용하기
TestReporter는 TestInfo와 조합하면 테스트 메타데이터 기반으로 로그를 남기는 구조를 만들 수 있습니다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.TestReporter;
class TestReporterCombinedTest {
@Test
void testWithInfo(TestInfo info, TestReporter reporter) {
reporter.publishEntry("test", info.getDisplayName());
reporter.publishEntry("tags", info.getTags().toString());
reporter.publishEntry("status", "executing");
}
}
설명
- TestInfo로 테스트 이름·태그를 가져오고
- TestReporter로 실행 정보를 기록하는 조합 패턴
6. TestReporter 사용 시 유용한 활용 사례
- 시나리오 테스트 단계 기록
- 예: 로그인 → 상품 선택 → 결제
- 각 단계별 이벤트를 리포팅하여 문제 발생 시 추적성 향상
- 테스트 환경 정보 기록
- OS, JVM 버전, 환경 변수 등
- 재현이 어려운 문제를 디버깅할 때 유용
- CI 파이프라인 로그 품질 향상
- 단순 println보다 체계적으로 기록 가능
- 리포터가 구조적으로 인식할 수 있어 검색/필터링이 쉬움
- 동적 테스트에서 메타데이터 기록
- DynamicTest 생성 시 테스트 이름과 실행 정보를 함께 남길 수 있음
7. TestReporter 사용 시 주의할 점
- 표준 출력이 아닌 리포터 시스템에 기록된다는 점 이해 필요
- publishEntry는 System.out.println과 다름
- 리포터의 출력 방식에 따라 보이는 결과가 달라질 수 있음
- 민감 정보 기록 금지
- 환경 값을 기록할 때 비밀번호·API Key 등은 절대 포함하지 않도록 주의
- 로깅 기능 대체로 사용 X
- 비즈니스 로직의 로그가 아닌, 테스트 실행 맥락을 남기는 용도로만 사용
- SLF4J 같은 일반 로깅 라이브러리의 역할과는 구분해야 함
8. 정리
- TestReporter는 JUnit5에서 제공하는 테스트 실행 정보 기록 도구
- 테스트 흐름 중 이벤트, 테스트 메타데이터, 시나리오 단계를 구조적으로 리포팅 가능
- TestInfo와 조합하면 강력한 테스트 문서화·로그 구조 구현 가능
- CI·IDE와의 연동에서 특히 효과적
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] BeforeEachCallback·AfterEachCallback 확장 포인트 이해 (0) | 2026.01.17 |
|---|---|
| [JUnit5] DynamicTest로 동적 테스트 생성하기 (0) | 2026.01.16 |
| [JUnit5] TestInfo로 테스트 메타데이터 활용하기 (0) | 2026.01.15 |
| [JUnit5] Assumptions로 조건부 테스트 실행하는 방법 (0) | 2026.01.15 |
| [JUnit] setName() – 테스트 이름 변경하기 (0) | 2026.01.14 |
Comments
