어제 오늘 내일

[JUnit5] assumeTrue()로 조건 만족 시 테스트 실행하기 본문

IT/JUnit

[JUnit5] assumeTrue()로 조건 만족 시 테스트 실행하기

hi.anna 2026. 1. 18. 08:49

1. assumeTrue()

assumeTrue()는 JUnit5의 Assumptions 기능 중 하나로, 특정 조건이 참일 때만 테스트를 실행하도록 제어할 때 사용한다. 조건이 거짓이면 테스트는 **실패가 아니라 ‘Skipped(건너뛰기)’**로 처리되며, 이는 환경 의존적인 테스트를 작성할 때 특히 유용하다.
예를 들어 운영체제가 Windows일 때만 실행하거나, 특정 시스템 프로퍼티가 설정된 경우에만 실행하도록 만들 수 있다.

 

2. 기본 사용법 예제

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.*;

class AssumptionTest {

    @Test
    void testRunOnlyOnProd() {
        String env = System.getenv("APP_ENV");
        
        assumeTrue("prod".equals(env)); // 조건이 false면 테스트는 실행되지 않음

        assertTrue(env.length() > 0); // 위 조건이 true일 때만 실행
    }
}

설명

  • assumeTrue("prod".equals(env))가 참이면 아래 테스트 코드가 실행된다.
  • 참이 아니면 테스트는 건너뛰기(Skipped) 처리되며 실패하지 않는다.

 

3. 메시지를 함께 사용하는 방식

테스트가 건너뛰어진 이유를 명확하게 남기려면 메시지를 함께 전달할 수 있다.

assumeTrue(isLinux(), "이 테스트는 Linux에서만 실행됩니다.");

설명

  • 두 번째 인자는 테스트 스킵 이유를 문서처럼 남길 때 유용하다.

 

4. 조건을 메서드로 분리해 가독성 높이기

조건이 복잡해지면 별도의 메서드로 분리해 테스트 목적을 더 명확하게 표현할 수 있다.

@Test
void testOnlyWhenServiceAvailable() {
    assumeTrue(isServiceUp());

    // 서비스가 정상 동작 중일 때만 이 테스트가 실행됨
    assertEquals("OK", callService());
}

private boolean isServiceUp() {
    // 예: 외부 시스템 Ping, 환경 변수 등 확인
    return true;
}

 

5. assumeTrue()를 활용해야 하는 상황

  • 운영체제(OS)에 따라 테스트 실행 여부가 달라질 때
  • 특정 환경 변수, 시스템 프로퍼티가 필요한 테스트
  • 네트워크·외부 서비스 의존 테스트를 선택적으로 실행하고 싶을 때
  • CI 환경 여부에 따라 일부 테스트를 건너뛰고 싶을 때

assert 계열 메서드는 실패를 의미하지만, Assumptions는 테스트 실행 조건을 제어하는 도구라는 점을 기억하면 좋다.

 

6. 추가로 알아두면 좋은 Assumptions 기능

assumeTrue() 외에도 다음과 같은 메서드들이 있다.

  • assumeFalse() — 조건이 거짓일 때만 테스트 실행
  • assumingThat() — 조건에 따라 일부 코드만 실행하고 나머지는 그대로 진행

이런 기능을 조합하면 환경 기반 테스트 로직을 깔끔하게 유지할 수 있다.

 

 

반응형
Comments