어제 오늘 내일

[JUnit5] ConditionEvaluationResult.disabled() 활용하기 본문

IT/JUnit

[JUnit5] ConditionEvaluationResult.disabled() 활용하기

hi.anna 2026. 1. 27. 08:46

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/로컬 분리 실행 전략을 구성하는 데 매우 효과적이다.

 

 

반응형
Comments