어제 오늘 내일

[JUnit5] ConditionEvaluationResult.enabled() 사용법 본문

IT/JUnit

[JUnit5] ConditionEvaluationResult.enabled() 사용법

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

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보다 실행 단계가 더 앞서기 때문에, 테스트 자체를 실행 목록에서 제외하는 높은 수준의 제어가 필요할 때 반드시 사용되는 도구다.

 

반응형
Comments