| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- junit5
- 문자열
- input
- 테스트자동화
- ArrayList
- 단위테스트
- string
- 자바스크립트
- Eclipse
- list
- 이클립스
- math
- html
- javascript
- java테스트
- HashMap
- json
- 정규식
- CSS
- Visual Studio Code
- 배열
- Java
- 자바
- vscode
- junit
- js
- 인텔리제이
- IntelliJ
- Array
- 자바문법
- Today
- Total
어제 오늘 내일
[JUnit5] ConditionEvaluationResult로 조건 평가 결과 처리하기 본문
JUnit5의 조건부 실행(Conditional Execution) 기능은 테스트를 특정 조건에서만 실행하거나 스킵할 수 있도록 돕습니다.
이러한 조건부 실행을 구현하는 핵심 API가 바로 ConditionEvaluationResult입니다.
JUnit5 내부의 ExecutionCondition 확장 포인트에서 테스트 실행 여부를 결정할 때 사용됩니다.
이번 글에서는 ConditionEvaluationResult가 무엇이며, 어떻게 활용되는지, 직접 조건을 만들어서 테스트 실행을 제어하는 방법까지 단계별로 설명합니다.
1. ConditionEvaluationResult란?
ConditionEvaluationResult는 테스트 실행 여부를 나타내는 결과 객체입니다.
ExecutionCondition 확장에서 반환되며,
테스트를 실행할지(SUCCESSFUL), 스킵할지(DISABLED)를 결정합니다.
ConditionEvaluationResult는 두 가지 상태를 가집니다.
- enabled(...) → 테스트 실행 허용
- disabled(...) → 테스트 스킵(Aborted 상태 아님, 완전히 Skipped 처리)
테스트 실행 조건을 커스터마이징할 때 핵심적으로 사용하는 객체입니다.
2. 기본 사용 위치: ExecutionCondition
ConditionEvaluationResult는 ExecutionCondition 확장에서 테스트 실행 여부를 제어할 때 사용됩니다.
즉,
- 조건 검사 → 결과 생성(ConditionEvaluationResult) → JUnit이 해석하여 테스트 실행/스킵 결정
ExecutionCondition 기본 형태
import org.junit.jupiter.api.extension.*;
public class MyCondition implements ExecutionCondition {
@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
// 조건 판단
return ConditionEvaluationResult.enabled("조건 충족");
}
}
3. 조건에 따라 테스트 실행 여부 결정하기
예제: 환경 변수 기반 조건부 실행 확장 만들기
“APP_ENV가 dev일 때만 테스트 실행하고, 그 외 환경에서는 스킵”하는 조건을 구현해보겠습니다.
import org.junit.jupiter.api.extension.*;
import java.util.Optional;
public class DevOnlyCondition implements ExecutionCondition {
@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
String env = Optional.ofNullable(System.getenv("APP_ENV")).orElse("unknown");
if ("dev".equalsIgnoreCase(env)) {
return ConditionEvaluationResult.enabled("DEV 환경이므로 실행");
}
return ConditionEvaluationResult.disabled("DEV 환경이 아니므로 스킵됨: " + env);
}
}
설명
- 조건이 충족되면 enabled 반환 → 테스트 실행
- 조건이 충족되지 않으면 disabled 반환 → 테스트 스킵
- 메시지는 IDE·CI 로그에서 조건 평가 결과로 표시됨
4. 확장을 테스트 클래스에 적용하기
위에서 만든 조건 확장을 적용해봅시다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(DevOnlyCondition.class)
class DevOnlyTest {
@Test
void sampleTest() {
System.out.println("이 테스트는 DEV 환경에서만 실행됩니다.");
}
}
- APP_ENV=dev → 실행
- 그 외 → Skipped
5. ConditionEvaluationResult의 주요 팩토리 메서드
JUnit이 제공하는 정적 생성 메서드는 다음과 같습니다.
1) enabled(String message)
ConditionEvaluationResult.enabled("조건 충족");
테스트 실행 허용 + 이유 메시지 출력.
2) disabled(String message)
ConditionEvaluationResult.disabled("조건 미충족");
테스트 스킵 + 이유 메시지 기록.
3) enabledByDefault(boolean enabled)
JUnit5 내부 기본 조건 처리 시 사용되지만 직접 쓸 일은 거의 없음.
6. 실전 활용 사례
1) OS 기반 조건
Windows에서만 테스트 실행:
if (!System.getProperty("os.name").toLowerCase().contains("win")) {
return ConditionEvaluationResult.disabled("Windows에서만 실행됨");
}
2) 설정 파일 값 기반 실행
config.yml이 특정 값을 포함할 때만 실행.
if (config.isFeatureEnabled()) {
return ConditionEvaluationResult.enabled("기능 활성화됨");
}
return ConditionEvaluationResult.disabled("기능 비활성화됨");
3) CI 환경에서만 실행되는 테스트
GitHub Actions 등 특정 CI 환경에서만 실행:
if ("true".equals(System.getenv("CI"))) {
return ConditionEvaluationResult.enabled("CI 환경이므로 실행");
}
return ConditionEvaluationResult.disabled("CI 환경이 아니여서 스킵됨");
4) 커스텀 애너테이션 조건 처리
@EnabledIfFeature("x") 같은 애너테이션 직접 구현 시 ConditionEvaluationResult를 반환하여 기능 제어 가능.
7. 주의할 점
- Disabled는 “실패”가 아니라 “스킵”
- 테스트 실패로 처리되지 않음
- CI 테스트 통과 기준에 영향을 주지 않음
- ExecutionCondition은 전체 테스트 실행 흐름에 영향을 주므로 신중히 적용해야 함
- 잘못 적용하면 의도치 않게 많은 테스트가 스킵될 수 있음
- ConditionEvaluationResult는 테스트 로깅 메시지를 충분히 명확하게 적는 것이 좋음
- 왜 스킵되었는지 모르면 디버깅 어려움
- 애너테이션 기반 조건(JUnit5 기본 기능)과도 조합 가능
- @EnabledOnOs, @EnabledIfEnvironmentVariable 등을 대체하거나 확장 가능
8. 정리
- ConditionEvaluationResult는 JUnit5 조건부 실행의 핵심 결과 객체
- ExecutionCondition 확장 포인트에서 테스트 실행 여부를 enabled/disabled로 결정
- 환경 변수, OS, 설정값, 커스텀 애너테이션 등 다양한 조건 기반 테스트 제어 가능
- 명확한 메시지를 포함하여 테스트 로그 가독성을 높이는 것이 중요
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] assumeFalse()로 조건 불만족 시 테스트 실행하기 (0) | 2026.01.19 |
|---|---|
| [JUnit5] assumeTrue()로 조건 만족 시 테스트 실행하기 (1) | 2026.01.18 |
| [JUnit5] ExtensionContext로 테스트 실행 컨텍스트 다루기 (0) | 2026.01.17 |
| [JUnit5] BeforeEachCallback·AfterEachCallback 확장 포인트 이해 (0) | 2026.01.17 |
| [JUnit5] DynamicTest로 동적 테스트 생성하기 (0) | 2026.01.16 |
