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