| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 배열
- json
- 단위테스트
- ArrayList
- Visual Studio Code
- Java
- junit5
- javascript
- math
- 자바스크립트
- java테스트
- 이클립스
- string
- 자바
- input
- IntelliJ
- HashMap
- 정규식
- Array
- 자바문법
- html
- Eclipse
- vscode
- junit
- list
- js
- 인텔리제이
- CSS
- 테스트자동화
- 문자열
- Today
- Total
어제 오늘 내일
[JUnit5] ConditionEvaluationResult.disabled() 활용하기 본문
1. ConditionEvaluationResult.disabled()란 무엇인가
ConditionEvaluationResult.disabled()는 JUnit5의 조건부 실행(Execution Condition) 기능에서 사용되는 메서드로,
테스트가 특정 조건을 만족하지 않을 때 테스트 실행을 스킵(Skipped) 하도록 만드는 역할을 한다.
ExecutionCondition 확장에서 조건을 평가할 때,
disabled()를 반환하면 JUnit은 테스트를 아예 실행하지 않고 건너뛰기 처리한다.
즉,
- enabled() → 테스트 실행
- disabled() → 테스트 스킵
이처럼 실행 여부를 테스트 시작 전 단계에서 제어할 수 있기 때문에,
실행 조건이 명확한 테스트 환경에서 매우 유용하다.
2. 기본 사용 형태
ConditionEvaluationResult.disabled("조건 불충족: 테스트 비활성화됨");
설명
- 문자열 메시지는 스킵 이유를 리포트에 남기는 데 활용된다.
- 명확한 메시지를 남기면 debugging과 CI 리포트 분석에서 큰 도움이 된다.
3. Custom ExecutionCondition에서 disabled() 사용 예제
아래 예제는 특정 OS가 아닐 때 테스트를 비활성화하는 조건 확장이다.
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
import org.junit.jupiter.api.extension.ExecutionCondition;
import org.junit.jupiter.api.extension.ExtensionContext;
public class WindowsOnlyCondition implements ExecutionCondition {
@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
boolean isWindows = System.getProperty("os.name").startsWith("Windows");
if (isWindows) {
return ConditionEvaluationResult.enabled("Windows 환경에서 실행");
} else {
return ConditionEvaluationResult.disabled("Windows가 아니므로 테스트 스킵");
}
}
}
사용 예:
@ExtendWith(WindowsOnlyCondition.class)
class OsConditionalTest {
@Test
void runWindowsOnlyTest() {
assertTrue(true);
}
}
4. disabled()가 실행되는 흐름
JUnit5는 테스트 실행 과정에서 다음 순서로 ExecutionCondition을 평가한다.
테스트 탐색(Discovery)
→ ExecutionCondition.evaluateExecutionCondition() 호출
→ ConditionEvaluationResult 평가
→ enabled()이면 실행, disabled()이면 스킵 처리
즉, 테스트가 실행되기 전 단계에서 스킵이 결정되므로,
무거운 리소스 초기화가 실행되지 않는다는 점에서 효율적이다.
5. 여러 조건이 있을 때 disabled()의 영향
ExecutionCondition이 여러 개 등록되어 있을 경우:
- 하나라도 disabled() 반환 → 테스트 전체 스킵
- 모든 조건이 enabled() → 테스트 실행
즉:
Condition A → enabled
Condition B → disabled
→ 테스트 스킵
반대로:
Condition A → enabled
Condition B → enabled
→ 테스트 실행
disabled()는 실행 여부에 대한 최종적인 거부 신호 역할을 한다.
6. disabled() 활용 패턴 정리
✔ 특정 환경 변수 기반 실행 제한
String mode = System.getenv("RUN_MODE");
if (!"prod".equals(mode)) {
return ConditionEvaluationResult.disabled("RUN_MODE가 prod가 아님");
}
✔ JDK 버전 조건 제한
if (Runtime.version().feature() < 17) {
return ConditionEvaluationResult.disabled("JDK 17 미만에서는 실행하지 않음");
}
✔ 네트워크 또는 외부 서비스 의존 테스트 제한
if (!isServiceAlive()) {
return ConditionEvaluationResult.disabled("외부 서비스 응답 없음 → 테스트 스킵");
}
✔ 기능 플래그(Feature Flag) 기반 테스트 관리
boolean featureOn = Boolean.getBoolean("feature.x.enabled");
if (!featureOn) {
return ConditionEvaluationResult.disabled("Feature X 비활성화 상태");
}
이런 패턴을 활용하면 대규모 프로젝트에서도 테스트 실행 조건을 체계적으로 관리할 수 있다.
7. enabled() vs disabled() 간단 비교
| 메서드 | 의미 | 테스트 실행 여부 |
| ConditionEvaluationResult.enabled() | 조건 충족, 실행 허용 | 실행됨 |
| ConditionEvaluationResult.disabled() | 조건 불충족, 실행 금지 | 스킵됨 |
Assumptions와의 차이:
- Assumptions는 테스트 중간에서 스킵 결정
- ExecutionCondition은 테스트 실행 전 단계에서 실행 여부 결정(더 강력함)
📌 결론
ConditionEvaluationResult.disabled()는 JUnit5에서 테스트 조건을 보다 정교하게 제어하기 위한 핵심 도구이다.
실행 전 단계에서 테스트를 과감하게 제외할 수 있어,
환경 의존 테스트, 베타 기능 테스트, CI/로컬 분리 실행 전략을 구성하는 데 매우 효과적이다.
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] ConditionEvaluationResult.enabled() 사용법 (0) | 2026.01.27 |
|---|---|
| [JUnit5] ExtensionContext.getStore()로 데이터 저장하고 가져오기 (0) | 2026.01.26 |
| [JUnit5] ExtensionContext.getTestMethod()로 메소드 정보 조회 (0) | 2026.01.26 |
| [JUnit5] ExtensionContext.getTestClass()로 테스트 클래스 접근하기 (0) | 2026.01.25 |
| [JUnit5] ExtensionContext.getDisplayName() 활용법 (0) | 2026.01.25 |
