| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Eclipse
- list
- ArrayList
- html
- 문자열
- 이클립스
- math
- vscode
- input
- js
- junit5
- HashMap
- 자바
- junit
- java테스트
- 자바문법
- 단위테스트
- 테스트자동화
- CSS
- Java
- string
- javascript
- 인텔리제이
- 정규식
- json
- 배열
- IntelliJ
- Array
- 자바스크립트
- Visual Studio Code
- Today
- Total
어제 오늘 내일
[JUnit5] ConditionEvaluationResult.enabled() 사용법 본문
1. ConditionEvaluationResult.enabled()란 무엇인가
ConditionEvaluationResult.enabled()는 JUnit5의 조건부 실행(Execution Condition) 확장 기능에서 사용되는 메서드로,
특정 조건을 만족해 테스트를 실행해야 함을 나타내는 결과 객체를 생성한다.
Execution Condition은 ExecutionCondition 인터페이스를 구현해 만들며,
JUnit5는 테스트 실행 전에 이 조건을 평가해 “실행(enabled)” 또는 “비활성(disabled)” 여부를 결정한다.
즉, enabled()는 “이 조건에서는 테스트를 실행해도 된다”라는 신호를 JUnit 플랫폼에 전달하는 역할을 한다.
2. 기본 사용 형태
ConditionEvaluationResult.enabled("조건 충족: 테스트 실행 허용");
설명
- 첫 번째 인자는 설명 메시지(Reason)이며, 테스트 리포트에 표시된다.
- 메시지는 선택 사항이지만, 유지보수와 디버깅을 위해 작성하는 것이 좋다.
3. Custom ExecutionCondition 구현 예제
아래 예제는 시스템 프로퍼티 "feature.enabled"가 true일 때만 테스트를 실행하도록 하는 조건 확장이다.
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
import org.junit.jupiter.api.extension.ExecutionCondition;
import org.junit.jupiter.api.extension.ExtensionContext;
public class FeatureFlagCondition implements ExecutionCondition {
@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
String enabled = System.getProperty("feature.enabled", "false");
if ("true".equalsIgnoreCase(enabled)) {
return ConditionEvaluationResult.enabled("기능 플래그 활성화됨");
} else {
return ConditionEvaluationResult.disabled("기능 플래그 비활성화됨");
}
}
}
사용 예:
@ExtendWith(FeatureFlagCondition.class)
class FeatureTest {
@Test
void runOnlyWhenFeatureOn() {
assertTrue(true);
}
}
4. enabled()를 활용해야 하는 상황
- 특정 설정값, 환경 변수, 시스템 프로퍼티에 따라 테스트 실행 여부를 결정하고 싶을 때
- OS, JDK 버전, 네트워크 상태 등에 따라 테스트를 제한할 때
- 실험 기능 또는 베타 기능의 테스트를 조건부로 실행하고 싶을 때
- CI 환경과 로컬 환경에서 실행 조건을 분리하고 싶을 때
ExecutionCondition 확장은 JUnit의 Assumptions보다 더 이른 단계에서 테스트 실행 여부를 제어하기 때문에,
전체 테스트 실행 로직을 아예 변경하고 싶을 때 적합하다.
5. enabled()는 이런 흐름에서 동작한다
테스트 실행 과정 중 ExecutionCondition은 다음 순서에서 평가된다.
테스트 발견(discovery) → 조건 평가(ExecutionCondition) → 테스트 실행 여부 결정
즉, 테스트가 실행되기도 전에 JUnit이 조건을 평가하면서 다음 둘 중 하나를 결정한다.
- enabled() → 테스트 정상 실행
- disabled() → 테스트 스킵(Skipped) 처리
6. 여러 조건 중 하나라도 enabled()이면?
여러 개의 ExecutionCondition이 있으면 JUnit은 모든 조건을 평가한 뒤,
하나라도 disabled()를 반환하면 테스트를 실행하지 않는다.
모든 조건이 enabled()일 때만 실행된다.
즉:
- Condition A → enabled
- Condition B → enabled
- → 테스트 실행
하지만:
- Condition A → enabled
- Condition B → disabled
- → 테스트 스킵
7. enabled() 활용 패턴 정리
✔ JDK 버전 조건부 실행
if (Runtime.version().feature() >= 17) {
return ConditionEvaluationResult.enabled("JDK 17 이상");
}
✔ OS 기반 실행 제어
if (System.getProperty("os.name").startsWith("Windows")) {
return ConditionEvaluationResult.enabled("Windows 환경");
}
✔ 네트워크 상태 기반
외부 API가 살아 있으면 enabled(), 죽어 있으면 disabled() 처리 가능.
8. 결론
ConditionEvaluationResult.enabled()는 JUnit5 조건부 테스트 실행 기능의 핵심으로,
테스트 실행 허용 여부를 확장에서 직접 제어할 수 있게 한다.
Assumptions보다 실행 단계가 더 앞서기 때문에, 테스트 자체를 실행 목록에서 제외하는 높은 수준의 제어가 필요할 때 반드시 사용되는 도구다.
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] ConditionEvaluationResult.disabled() 활용하기 (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 |
