반응형
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
- java테스트
- HashMap
- input
- junit5
- 이클립스
- json
- Java
- IntelliJ
- 단위테스트
- ArrayList
- 문자열
- js
- Visual Studio Code
- junit
- Eclipse
- 배열
- vscode
- javascript
- CSS
- 자바문법
- 테스트자동화
- math
- 정규식
- 인텔리제이
- string
- list
- Array
- html
- 자바
- 자바스크립트
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] TestReporter에서 Map 기반 로그 기록하기 본문
1. Map 기반 로그 기록이란?
JUnit5의 TestReporter는 테스트 실행 중 키-값 형태의 구조적 로그를 기록할 수 있도록 지원한다. 그 중 Map 기반 로그 기록은 여러 필드를 하나의 엔트리로 묶어 한 번에 전달할 수 있어, 테스트 단계별 상세 로그를 남길 때 매우 유용하다.
publishEntry(Map<String, String> values) 메서드를 사용하면 복잡한 로그 데이터를 깔끔하고 일관된 구조로 리포트에 남길 수 있다.
2. 기본 사용 예제
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestReporter;
import java.util.HashMap;
import java.util.Map;
class ReporterMapExample {
@Test
void publishMapEntry(TestReporter reporter) {
Map<String, String> log = new HashMap<>();
log.put("step", "1");
log.put("action", "DB 연결 초기화");
log.put("status", "OK");
reporter.publishEntry(log);
}
}
설명
- Map을 구성해 publishEntry()에 그대로 전달한다.
- 테스트 리포트에 여러 항목이 하나의 구조적 로그로 기록된다.
- 단일 필드보다 분석하기 쉬운 형태의 데이터를 남길 수 있다.
3. Map 기반 로그를 활용한 단계별 로깅 패턴
테스트 수행 흐름을 단계적으로 기록하기에 특히 적합하다.
@Test
void stepLogging(TestReporter reporter) {
reporter.publishEntry(Map.of(
"step", "1",
"detail", "사용자 인증 시작",
"result", "SUCCESS"
));
reporter.publishEntry(Map.of(
"step", "2",
"detail", "데이터 조회",
"result", "SUCCESS"
));
}
활용 포인트
- 각 단계 로그가 독립 구조로 기록되어 가독성이 높음
- CI 환경에서 단계별 실패 지점 파악이 훨씬 쉬워짐
4. 동적 데이터 기록을 위한 Map 생성 패턴
테스트 중간에 동적으로 값을 채워넣어 로그로 남길 수 있다.
@Test
void dynamicLog(TestReporter reporter) {
Map<String, String> log = new HashMap<>();
log.put("step", "validation");
log.put("time", String.valueOf(System.currentTimeMillis()));
if (Math.random() > 0.5) {
log.put("status", "PASS");
} else {
log.put("status", "RETRY");
}
reporter.publishEntry(log);
}
설명
- 테스트 내 조건 처리 결과를 구조적으로 기록 가능
- 재현하기 어려운 조건 테스트 로그를 남길 때 강력함
5. BeforeEach/AfterEach에서 Map 기반 로그 사용하기
라이프사이클 훅에서도 Map 기반 로그를 함께 남기면 전체 테스트 흐름을 손쉽게 추적할 수 있다.
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
class ReporterLifecycleExample {
@BeforeEach
void before(TestReporter reporter) {
reporter.publishEntry(Map.of(
"event", "BeforeEach",
"status", "initialized"
));
}
@AfterEach
void after(TestReporter reporter) {
reporter.publishEntry(Map.of(
"event", "AfterEach",
"status", "completed"
));
}
@Test
void test() {}
}
6. Map 로그를 사용하면 좋은 상황 요약
- 로그를 단순 문자열 대신 구조화된 형태로 남기고 싶을 때
- 테스트 단계(demo, setup, validation 등)를 기록해야 할 때
- CI/CD 파이프라인에서 테스트 결과를 정교하게 분석해야 할 때
- 테스트 자동화 도구에서 파싱하기 좋은 로그가 필요할 때
Map 기반 로그는 테스트 데이터를 구조적으로 표현할 수 있어, 협업 환경에서 테스트 가독성·추적성이 크게 향상된다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] dynamicContainer()로 테스트 그룹 구성하기 (0) | 2026.01.23 |
|---|---|
| [JUnit5] dynamicTest()로 동적 테스트 정의하기 (0) | 2026.01.23 |
| [JUnit5] TestReporter.publishEntry()로 테스트 로그 남기기 (0) | 2026.01.22 |
| [JUnit5] TestInfo.getTestMethod()로 테스트 메소드 정보 확인하기 (1) | 2026.01.21 |
| [JUnit5] TestInfo.getTestClass()로 테스트 클래스 정보 얻기 (0) | 2026.01.21 |
Comments
