본문 바로가기
Java

[Java] JUnit 5 사용법 (8) - OS, JAVA, JVM, 시스템 환경변수 별 테스트 (@EnabledOnOs, @DisabledOnOs, @EnabledOnJre, @DisabledOnJre, @EnabledOnJreRange, @EnabledIfSystemProperty, @DisabledIfSystemProperty, @EnabledIfEnvironmentVariable, @Dis..

by 노력남자 2022. 9. 6.
반응형

이번 포스팅에선 JUnit 5에서 OS 종류, JAVA 버전, 시스템 환경변수 별 테스트하는 방법에 대해 알아보겠습니다.

 

@EnabledOnOs, @DisabledOnOs

 

OS 환경 별 테스트 할 수 있게 해주는 어노테이션

 

파라미터명 타입 설명
value OS[] 테스트 OS

LINUX
MAC
SOLARIS
WINDOWS
OTHER
disabledReason String disabled 이유

@Disabled 사용했을 경우 사용

 

예제

 

@EnabledOnOs(OS.WINDOWS)를 자주 사용한다면 @Test와 @EnabledOnOs(OS.WINDOWS)를 합쳐 @TestOnWindows로 사용할 수 있습니다.

 

package com.effortguy.junit5;

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;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

public class EnabledOnOsAnnotation {

    @Test
    @EnabledOnOs(OS.WINDOWS)
    void testEnabledOnOsWindows() {
    }

    @TestOnWindows
    void testEnabledOnOsWindows2() {
    }

    @Test
    @EnabledOnOs({OS.MAC, OS.LINUX})
    void testEnabledOnOsMacAndLinux() {
    }

    @Test
    @DisabledOnOs(value = {OS.WINDOWS}, disabledReason = "test")
    void testDisabledOnOs() {
    }

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Test
    @EnabledOnOs(OS.WINDOWS)
    @interface TestOnWindows {
    }
}

 

결과

 

 

@EnabledOnJre, @DisabledOnJre

 

JRE 환경 별 테스트 할 수 있게 해주는 어노테이션

 

파라미터명 타입 설명
value JRE[] 테스트 JRE

JAVA_8
JAVA_9
JAVA_10
JAVA_11
JAVA_12
JAVA_13
JAVA_14
JAVA_15
JAVA_16
OTHER
disabledReason String disabled 이유

@Disabled 사용했을 경우 사용

 

@EnabledOnJreRange

 

JRE 버전 범위로 테스트 할 수 있게 해주는 어노테이션

 

파라미터명 타입 설명
min JRE 테스트할 최소 JRE 버전
max JRE 테스트할 최대 JRE 버전
disabledReason String disabled 이유

@Disabled 사용했을 경우 사용

 

예제

 

JRE 8 에서 테스트 진행

 

package com.effortguy.junit5;

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

public class EnabledOnJreAnnotation {

    @Test
    @EnabledOnJre(JRE.JAVA_8)
    public void testEnabledOnJreJava8() {
    }

    @Test
    @EnabledOnJre({JRE.JAVA_9, JRE.JAVA_10})
    public void testEnabledOnJreJava9And10() {
    }

    @Test
    @DisabledOnJre(value = {JRE.JAVA_8}, disabledReason = "test")
    public void testDisabledOnJreJava8() {
    }

    @Test
    @EnabledForJreRange(min = JRE.JAVA_8, max =JRE.JAVA_12)
    public void testEnabledForJreRange() {
    }
}

 

결과

 

 

@EnabledIfSystemProperty, @DisabledIfSystemProperty

 

JVM의 System Property 별 테스트를 할 수 있게 해줍니다.

(JVM의 System Property 가 궁금하시다면 https://coding-factory.tistory.com/527 에서 확인해주세요.)

 

만약 2개 이상의 조건으로 테스트하고 싶다면 @EnabledIfSystemProperties, @DisabledIfSystemProperties를 사용할 수 있습니다.

 

파라미터명 타입 설명
named String JVM의 Systme Property 명
matches String 찾고자하는 이름, 정규식
disabledReason String disabled 이유

@Disabled 사용했을 경우 사용

 

예제

 

package com.effortguy.junit5;

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

public class EnabledIfSystemPropertyAnnotation {

    @Test
    @EnabledIfSystemProperty(named = "java.version", matches = "1.8.0_261")
    void testEnabledIfSystemProperty() {
    }

    @Test
    @EnabledIfSystemProperties({
            @EnabledIfSystemProperty(named = "java.version", matches = "1.8.0_261"),
            @EnabledIfSystemProperty(named = "java.vendor", matches = "Oracle Corporation")
    })
    void testEnabledIfSystemProperties() {
    }

    @Test
    @DisabledIfSystemProperty(named = "java.version", matches = "1.8.0_261")
    void testDisabledIfSystemProperty() {
    }
}

 

결과

 

 

@EnabledIfEnvironmentVariable, @DisabledIfEnvironmentVariable

 

환경 변수 별로 테스트 할 수 있게 해주는 어노테이션

 

만약 2개 이상의 조건으로 테스트하고 싶다면 @EnabledIfEnvironmentVariables, @DisabledIfEnvironmentVariables를 사용할 수 있습니다.

 

파라미터명 타입 설명
named String 환경변수명
matches String 찾고자하는 이름, 정규식
disabledReason String disabled 이유

@Disabled 사용했을 경우 사용

 

예시

 

미리 환경 변수에 JUnit 을 5로 설정해놨습니다.

 

package com.effortguy.junit5;

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

public class EnabledIfEnvironmentVariableAnnotation {

    @Test
    @EnabledIfEnvironmentVariable(named = "JUnit", matches = "5")
    void testEnabledIfEnvironmentVariable() {
    }

    @Test
    @DisabledIfEnvironmentVariable(named = "JUnit", matches = "5")
    void testDisabledIfEnvironmentVariable() {
    }
}

 

결과

 

 

@EnabledIf, @DisabledIf

 

개발자 원하는 조건으로 테스트를 진행할 수 있습니다.

 

파라미터명 타입 설명
value String 조건 로직이 있는 메소드명
disabledReason String disabled 이유

@Disabled 사용했을 경우 사용

 

예제

 

package com.effortguy.junit5;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIf;
import org.junit.jupiter.api.condition.EnabledIf;

public class EnabledIfAnnotation {

    @EnabledIf("customCondition")
    @Test
    void testEnabledIf() {
    }

    @Test
    @DisabledIf("customCondition")
    void testDisabledIf() {
    }

    boolean customCondition() {
        return true;
    }
}

 

결과

 

 

다음 포스팅에선 JUnit 4에서 JUnit 5으로 마이그레이션하는 방법에 대해서 알아보겠습니다.

 

읽어주셔서 감사합니다.

반응형

댓글