JUnit5 조건부 테스트 - @EnabledOnOs, @EnabledOnJre, @EnabledIfEnvironmentVariable

테스트 코드는 조건(OS, Java 버전, 시스템 속성)에 따라 실행 여부를 결정

조건부 테스트

테스트 코드는 조건(OS, Java 버전, 시스템 속성)에 따라 실행 여부를 다르게 할 수 있다.

OS에 따른 테스트

@EnabledOnOs, @DisabledOnOs를 사용하면 특정 OS에 따른 조건으로 실행 여부를 설정 수 있다.

  • value에는 OS에 정의된 상수를 지정한다.
package com.devkuma.junit5.condition;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;

public class OsConditionTest {

    @Test
    @EnabledOnOs(OS.WINDOWS)
    void test1() {
        System.out.println("enabled on windows");
    }

    @Test
    @EnabledOnOs(OS.MAC)
    void test2() {
        System.out.println("enabled on mac");
    }

    @Test
    @DisabledOnOs(OS.WINDOWS)
    void test3() {
        System.out.println("disabled on windows");
    }

    @Test
    @DisabledOnOs(OS.MAC)
    void test4() {
        System.out.println("disabled on mac");
    }
}

실행 결과:

enabled on mac
disabled on windows

위 테스트 코드의 실행 환경은 Mac이다.

Java 버전

@EnabledOnJre, @DisabledOnJre를 사용하면 특정 Java 버전에 따른 조건으로 실행 여부를 설정 수 있다.

  • value에는 JRE가 정의 된 상수를 지정한다.
package sample.junit5;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnJre;
import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE;

class JUnit5Test {

    @Test
    @EnabledOnJre(JRE.JAVA_11)
    void test1() {
        System.out.println("enabled on java 11");
    }

    @Test
    @EnabledOnJre(JRE.JAVA_17)
    void test2() {
        System.out.println("enabled on java 17");
    }

    @Test
    @DisabledOnJre(JRE.JAVA_11)
    void test3() {
        System.out.println("disabled on java 11");
    }

    @Test
    @DisabledOnJre(JRE.JAVA_17)
    void test4() {
        System.out.println("disabled on java 17");
    }
}

실행 결과:

enabled on java 11
disabled on java 17

위 테스트 코드의 실행 환경은 실행 환경은 Java 11이다.

시스템 속성

@EnabledIfSystemProperty, @DisabledIfSystemProperty를 사용하면 시스템 속성 값을 조건으로 실행 여부를 설정 수 있다.

  • named에 조건이 되는 시스템 속성의 이름을 지정한다.
  • matches에 조건이 되는 값을 정규 표현으로 지정한다(전체 일치).
package com.devkuma.junit5.condition;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;

public class SystemConditionTest {

    @Test
    @EnabledIfSystemProperty(named = "java.vendor", matches = "AdoptOpenJDK")
    void test1() {
        System.out.println("enabled if AdoptOpenJDK");
    }

    @Test
    @EnabledIfSystemProperty(named = "java.vendor", matches = "Oracle.*")
    void test2() {
        System.out.println("enabled if Oracle");
    }

    @Test
    @DisabledIfSystemProperty(named = "java.vendor", matches = "AdoptOpenJDK")
    void test3() {
        System.out.println("disabled if AdoptOpenJDK");
    }

    @Test
    @DisabledIfSystemProperty(named = "java.vendor", matches = "Oracle.*")
    void test4() {
        System.out.println("disabled if Oracle");
    }
}

실행 결과

enabled if AdoptOpenJDK
disabled if Oracle

환경 변수

@EnabledIfEnvironmentVariable, @DisabledIfEnvironmentVariable를 사용하면 환경 변수의 값을 조건으로 실행 여부를 설정 수 있다.

  • named에 조건으로 만들 환경 변수의 이름을 지정한다.
  • matches에 조건이 되는 값을 정규 표현으로 지정한다(전체 일치).
package com.devkuma.junit5.condition;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;

public class EnvironmentVariableConditionTest {

    @Test
    @EnabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\AdoptOpenJDK\\\\.*")
    void test1() {
        System.out.println("enabled if AdoptOpenJDK");
    }

    @Test
    @EnabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\OpenJDK\\\\.*")
    void test2() {
        System.out.println("enabled if OpenJDK");
    }

    @Test
    @DisabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\AdoptOpenJDK\\\\.*")
    void test3() {
        System.out.println("disabled if AdoptOpenJDK");
    }

    @Test
    @DisabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\OpenJDK\\\\.*")
    void test4() {
        System.out.println("disabled if OpenJDK");
    }
}

실행 결과:

enabled if AdoptOpenJDK
disabled if OpenJDK


최종 수정 : 2022-12-09