반응형
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
- html
- Visual Studio Code
- list
- 테스트자동화
- junit
- Array
- 배열
- 단위테스트
- input
- js
- IntelliJ
- math
- 문자열
- json
- java테스트
- 자바
- Java
- string
- HashMap
- javascript
- CSS
- junit5
- 정규식
- 자바문법
- Eclipse
- 인텔리제이
- vscode
- ArrayList
- 이클립스
- 자바스크립트
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] TestInfo.getTestClass()로 테스트 클래스 정보 얻기 본문
1. getTestClass()란 무엇인가
TestInfo.getTestClass()는 현재 실행 중인 테스트가 속해 있는 테스트 클래스 정보를 Optional<Class<?>> 형태로 제공하는 메서드다.
테스트 이름이나 태그뿐 아니라, 테스트가 어떤 클래스에서 실행되고 있는지를 런타임에 파악할 수 있어 로깅, 공통 동작 처리, 리플렉션 기반 테스트 설정에 활용되기 좋다.
Optional로 감싸져 있으므로 값이 없을 가능성도 처리해야 한다.
2. 기본 사용 예제
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
class TestClassInfoExample {
@Test
void testClassInfo(TestInfo testInfo) {
System.out.println("테스트 클래스: " + testInfo.getTestClass());
}
}
설명
- 출력값은 Optional[클래스명] 형태로 표시된다.
예: Optional[class TestClassInfoExample] - Optional이므로 isPresent() 또는 orElse() 등을 활용해 안전하게 값을 꺼내야 한다.
3. 클래스명을 문자열로 정리해 출력하기
@Test
void printClassName(TestInfo testInfo) {
String className = testInfo.getTestClass()
.map(Class::getSimpleName)
.orElse("UnknownClass");
System.out.println("현재 테스트 클래스명: " + className);
}
설명
- map(Class::getSimpleName)을 이용해 순수 클래스명만 추출할 수 있다.
- Optional을 사용하여 값이 없을 경우 기본값 처리도 쉽게 가능하다.
4. 클래스 기반 공통 로깅 처리
테스트 클래스마다 공통 설정을 자동으로 적용하는 패턴이다.
@Test
void classBasedLogging(TestInfo testInfo) {
String className = testInfo.getTestClass()
.map(Class::getName)
.orElse("UnknownClass");
System.out.println("[START] " + className);
// 테스트 실행 로직
assertTrue(true);
}
활용 포인트
- 테스트 클래스 단위로 로깅을 통일하고 싶을 때
- 여러 테스트 파일에서 공통 형식의 로그를 생성하고 싶을 때
- 테스트 클래스별 환경 설정을 자동 적용할 때
5. getTestClass() + 리플렉션 활용 예제
테스트 클래스에 특정 애노테이션이 있는지 검사하는 패턴이다.
@Test
void checkCustomAnnotation(TestInfo testInfo) {
Class<?> testClass = testInfo.getTestClass().orElse(null);
if (testClass != null && testClass.isAnnotationPresent(Deprecated.class)) {
System.out.println("이 테스트 클래스는 Deprecated 상태입니다.");
}
assertTrue(true);
}
설명
- 메타 애노테이션을 기반으로 테스트 일부를 조건부 실행하거나 경고를 출력할 수 있다.
- 커스텀 애노테이션을 만들면 더욱 강력한 테스트 설정이 가능하다.
6. BeforeEach에서 테스트 클래스 정보를 사용하는 패턴
테스트 메서드뿐 아니라 라이프사이클 훅에서도 TestInfo를 받을 수 있다.
import org.junit.jupiter.api.BeforeEach;
class ClassLevelInitializationTest {
@BeforeEach
void setup(TestInfo testInfo) {
String className = testInfo.getTestClass()
.map(Class::getSimpleName)
.orElse("UnknownClass");
System.out.println(">>> 테스트 준비 중: " + className);
}
@Test
void sampleTest() {
assertEquals(1, 1);
}
}
설명
- 테스트 실행 전마다 해당 클래스명을 기반으로 로그·초기화 작업을 자동 수행할 수 있다.
- 다수의 테스트 클래스가 있는 프로젝트에서 특히 유용하다.
7. getTestClass()를 사용하면 좋은 상황 요약
- 테스트 클래스 기반 로깅이 필요한 경우
- 클래스 애노테이션을 검사해 조건부 테스트 제어가 필요할 때
- 클래스별 초기화 로직을 자동화하고 싶을 때
- CI 환경에서 어떤 테스트 클래스가 실행 중인지 명확하게 기록하고자 할 때
특히 규모가 큰 프로젝트에서는 클래스 단위 메타데이터를 활용하면 테스트 가독성과 유지보수성이 크게 증가한다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] TestReporter.publishEntry()로 테스트 로그 남기기 (0) | 2026.01.22 |
|---|---|
| [JUnit5] TestInfo.getTestMethod()로 테스트 메소드 정보 확인하기 (1) | 2026.01.21 |
| [JUnit5] TestInfo.getTags()로 태그 메타데이터 조회하기 (0) | 2026.01.20 |
| [JUnit5] TestInfo.getDisplayName() 사용 가이드 (0) | 2026.01.20 |
| [JUnit5] assumingThat()으로 부분 조건부 테스트 처리 (0) | 2026.01.19 |
Comments
