반응형
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
- 자바문법
- Eclipse
- CSS
- 자바스크립트
- 단위테스트
- junit5
- vscode
- 정규식
- Array
- 문자열
- 자바
- 배열
- json
- math
- 이클립스
- string
- input
- junit
- js
- 테스트자동화
- HashMap
- IntelliJ
- javascript
- Java
- java테스트
- Visual Studio Code
- list
- 인텔리제이
- html
- ArrayList
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] BeforeEachCallback.beforeEach() 실행 흐름 이해 본문
1. BeforeEachCallback.beforeEach()란 무엇인가
BeforeEachCallback은 JUnit5 확장 모델(Extension API)의 대표적인 콜백 인터페이스 중 하나이며,
beforeEach(ExtensionContext context) 메서드는 각 테스트 메서드 실행 직전에 호출되는 확장 포인트다.
기본 어노테이션인 @BeforeEach와 달리, 확장을 통해 테스트 외부에서 공통 동작을 주입할 수 있다는 점이 핵심이다.
로깅, 테스트 데이터 초기화, 환경 설정, Mock 세팅 등 다양한 작업을 확장으로 구현할 수 있다.
2. 기본 구현 예제
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
public class LoggingExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
System.out.println("[BeforeEachCallback] 실행 준비: " +
context.getRequiredTestMethod().getName());
}
}
설명
- context를 통해 현재 테스트 클래스, 테스트 메서드, 애노테이션 등의 정보를 조회할 수 있다.
- 실행 전 준비 작업을 넣을 수 있다.
3. 확장 적용 방법 – @ExtendWith 사용
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(LoggingExtension.class)
class ExtensionTest {
@Test
void testOne() {}
@Test
void testTwo() {}
}
실행 흐름 출력 예:
[BeforeEachCallback] 실행 준비: testOne
[BeforeEachCallback] 실행 준비: testTwo
4. 실제 실행 흐름 이해하기
JUnit5는 테스트를 실행할 때 다음 순서로 BeforeEach 관련 요소를 호출한다.
1) 확장(Extension)의 BeforeEachCallback.beforeEach()
2) 테스트 클래스의 @BeforeEach 메서드
3) 테스트 메서드(@Test)
즉, 확장이 먼저, @BeforeEach가 그 다음이다.
이를 통해 다음과 같은 구조를 만들 수 있다.
- 확장에서 공통 설정 또는 환경 준비 수행
- 각 테스트 클래스에서 개별 테스트 준비 작업 수행
- 이후 실제 테스트 실행
5. 실행 순서 확인 예제
public class FlowExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
System.out.println(">> 확장 BeforeEachCallback 실행");
}
}
@ExtendWith(FlowExtension.class)
class FlowTest {
@BeforeEach
void setup() {
System.out.println(">> @BeforeEach 실행");
}
@Test
void sampleTest() {
System.out.println(">> 테스트 실행");
}
}
결과:
>> 확장 BeforeEachCallback 실행
>> @BeforeEach 실행
>> 테스트 실행
6. ExtensionContext에서 얻을 수 있는 주요 정보
beforeEach() 안에서 제공되는 ExtensionContext는 매우 강력한 메타데이터 조회 도구이다.
예를 들어:
@Override
public void beforeEach(ExtensionContext context) {
String className = context.getRequiredTestClass().getSimpleName();
String methodName = context.getRequiredTestMethod().getName();
System.out.println("실행 클래스: " + className);
System.out.println("실행 메서드: " + methodName);
}
활용 가능 정보
- 테스트 클래스 정보
- 테스트 메서드 정보
- 디스플레이 네임
- 태그 정보
- 스토어(Store)에 데이터를 저장하여 테스트 간 공유 가능
7. BeforeEachCallback가 유용한 상황
- 테스트 실행 전마다 공통 초기화 로직을 삽입해야 할 때
- 여러 테스트 클래스에 반복되는 설정을 확장으로 통합하고 싶을 때
- 로깅, 타이머, 리소스 준비 등을 자동으로 적용하려고 할 때
- 테스트 프레임워크/도구와의 연동 지점을 만들고 싶을 때
특히 팀 단위에서 일관된 테스트 환경 구축이 필요할 때 크게 효과를 발휘한다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] ExtensionContext.getDisplayName() 활용법 (0) | 2026.01.25 |
|---|---|
| [JUnit5] AfterEachCallback.afterEach() 실행 흐름 정리 (0) | 2026.01.24 |
| [JUnit5] dynamicContainer()로 테스트 그룹 구성하기 (0) | 2026.01.23 |
| [JUnit5] dynamicTest()로 동적 테스트 정의하기 (0) | 2026.01.23 |
| [JUnit5] TestReporter에서 Map 기반 로그 기록하기 (0) | 2026.01.22 |
Comments
