반응형
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
- Array
- Eclipse
- junit5
- CSS
- vscode
- html
- ArrayList
- 단위테스트
- Visual Studio Code
- json
- 정규식
- 배열
- HashMap
- IntelliJ
- 자바문법
- 인텔리제이
- 자바스크립트
- junit
- js
- math
- javascript
- 자바
- Java
- 테스트자동화
- java테스트
- input
- string
- 문자열
- 이클립스
- list
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] ExtensionContext.getTestClass()로 테스트 클래스 접근하기 본문
1. ExtensionContext.getTestClass()란 무엇인가
ExtensionContext.getTestClass()는 JUnit5 확장 API에서 제공하는 메서드로,
현재 실행 중인 테스트가 속한 테스트 클래스 정보를 Optional<Class<?>> 형태로 반환한다.
확장에서 테스트 클래스 정보를 가져오면 다음과 같은 활용이 가능하다.
- 클래스 기반 로깅
- 클래스 애노테이션 검사
- 클래스 단위 설정/초기화 로직 적용
- 리플렉션 기반 유틸 처리
확장(Extension) 작성 시 가장 자주 사용하는 메타데이터 중 하나다.
2. 기본 사용 예제
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
public class ClassInfoExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
context.getTestClass().ifPresent(clazz ->
System.out.println("현재 테스트 클래스: " + clazz.getSimpleName())
);
}
}
설명
- Optional<Class<?>>을 반환하므로 ifPresent() 방식으로 안전하게 처리한다.
- 클래스명이 확장에서 바로 확인 가능하다.
3. 확장 적용 – @ExtendWith
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(ClassInfoExtension.class)
class ExtensionTest {
@Test
void sampleTest() {}
}
출력 예:
현재 테스트 클래스: ExtensionTest
4. 클래스 애노테이션 확인하기
테스트 클래스에 특정 애노테이션이 붙어 있는지 확인할 수 있다.
@Override
public void beforeEach(ExtensionContext context) {
context.getTestClass().ifPresent(clazz -> {
if (clazz.isAnnotationPresent(Deprecated.class)) {
System.out.println("⚠ Deprecated 테스트 클래스입니다: " + clazz.getName());
}
});
}
활용 포인트
- 커스텀 애노테이션 기반 조건 처리
- 환경 설정 자동화
- 클래스 단위 정책 적용
5. 클래스 정보를 사용한 로깅 패턴
@Override
public void beforeEach(ExtensionContext context) {
String className = context.getTestClass()
.map(Class::getSimpleName)
.orElse("UnknownClass");
System.out.println("[START CLASS] " + className);
}
설명
- 프로젝트 규모가 커질수록 클래스 단위 로그는 분석에 매우 유용하다.
- 테스트 컨테이너 구조를 확인할 때에도 도움된다.
6. 클래스 기반 초기화/정리 작업
확장에서 특정 클래스에만 적용하고 싶을 때 활용 가능하다.
@Override
public void beforeEach(ExtensionContext context) {
context.getTestClass().ifPresent(clazz -> {
if (clazz.getSimpleName().contains("DB")) {
setupDatabase();
}
});
}
private void setupDatabase() {
System.out.println("DB 초기화 로직 실행");
}
설명
- 클래스명 또는 애노테이션을 기준으로 조건부 설정 로직을 적용할 수 있다.
- 테스트 전용 공통 인프라 초기화가 가능해진다.
7. 동적 테스트 및 @Nested 클래스에서도 정상 동작
getTestClass()는 다음 두 경우에서도 올바른 클래스 정보를 제공한다.
- @Nested 내부 테스트 클래스
- Dynamic Test가 속한 실제 테스트 클래스
즉, 확장에서 항상 “현재 실행 중인 테스트 method가 어디에 속하는지” 정확히 추적할 수 있다.
8. getTestClass()를 사용하면 좋은 상황 요약
- 여러 테스트 클래스에 걸쳐 공통 설정을 확장에서 관리할 때
- 클래스 애노테이션 기반 실행 제어가 필요할 때
- 테스트 클래스별 로깅 및 모니터링을 적용하고 싶을 때
- 테스트 클래스 이름을 기준으로 분류/정책/조건을 적용할 때
- 동적 테스트라도 소속된 클래스 정보를 사용해야 할 때
확장 API를 활용한 테스트 자동화 환경에서는 필수적으로 사용하는 API 중 하나다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] ExtensionContext.getStore()로 데이터 저장하고 가져오기 (0) | 2026.01.26 |
|---|---|
| [JUnit5] ExtensionContext.getTestMethod()로 메소드 정보 조회 (0) | 2026.01.26 |
| [JUnit5] ExtensionContext.getDisplayName() 활용법 (0) | 2026.01.25 |
| [JUnit5] AfterEachCallback.afterEach() 실행 흐름 정리 (0) | 2026.01.24 |
| [JUnit5] BeforeEachCallback.beforeEach() 실행 흐름 이해 (0) | 2026.01.24 |
Comments
