ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 조건에 따라 테스트 실행하기
    테스트/Junit5 2021. 2. 2. 14:27

    특정한 운영체제의 환경변수, 환경에 따라 테스트를 실행하는 여부를 지정할 수 있다.

    특정한 환경에서 조건을 검사하는 메서드와 어노테이션은 다음과 같다.

     

    메서드

    패키지명 : org.junit.jupiter.api.Assumptions.*

    메서드: assumeTrue(조건), asummingThat(조건,테스트), assumeThat(조건, 테스트)

    조건이 만족하면 다음 테스트코드나, 메서드 매개변수로 작성한 테스트코드를 실행한다. -> 말로하면 어려우니 예제코드를 보자.

     

    어노테이션

    @Enabled

    @Disabled

    • onOS
    • OnJre
    • IfEnvironmentVariable

    예제 코드를 보면서 이해해보자.


    예제코드1. 환경변수 설정후 테스트하기

     

    본인은 맥OS를 사용하기 때문에 IntelliJ IDE 터미널 환경에서 bash_profile에 TEST_ENV란 환경변수를 설정해 주었다.

     

    환경변수 출력

    환경변수를 설정한 후 테스트 코드를 다음과 같이 작성해보자.

    import static org.junit.jupiter.api.Assumptions.assumeTrue;
    
    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
            assumeTrue("LOACAL".equalsIgnoreCase(test_env));
            System.out.println("LOCAL환경변수입니다.");
        }
    }

    assumeTrue메서드에서 환경변수가 LOCAL(대소구문자 상관없이)인지 확인한다.

    만약 TEST_ENV가 LOCAL이 아닌경우엔? -> 당연히 assumeTrue는 in not true가 되고 밑에 테스트코드가 실행되지 않는다.

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
            assumeTrue("NOT_LOCAL".equalsIgnoreCase(test_env));
            System.out.println("LOCAL환경변수입니다.");
        }
    }


    예제코드2. assumingThat 사용하기

     

    먼저 소스코드를 보기 전에 아래 설정값을 잘 확인해주자.

    주의사항 : Intellij에선 실행할 당시 bash_profile파일을 읽어들이기 때문에, Intellij에서 설정한 환경변수 값이 바로 적용되지 않는다. -> 다시 껏다가 켜주어야함. 

    intellij 터미널에서 bash_profile에서 환경변수 TEST_ENV 값 변경
    터미널 새로고침 후 환경변수 출력

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV");
            System.out.println(test_env);
         
        }
    }

    변경되지 않은 값을 출력한다. 이부분을 고려해서 assumingThat(조건, 테스트) 테스트코드를 작성해보자

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
            assumingThat("LOCAL".equalsIgnoreCase(test_env),()->{
                System.out.println("LOCAL환경변수입니다.");
            });
            assumingThat("SeongJun".equalsIgnoreCase(test_env),()->{
                System.out.println("SeongJun환경변수입니다.");
            });
        }
    }

    TEST_ENV의 값은 local이다.

    따라서 assumingThat조건을 만족하는 첫번째 테스트만 실행한다.


    예제코드3. 에노테이션 사용해서 특정 운영체제에서만 동작하거나 동작하지 않는 테스트코드 설정하기

    @EnabledOnOS어노테이션에 전달할 값 목록이다. 리눅스, 윈도우, 맥 등등 여러가지가 많다.

    만약 OS가 맥인경우 테스트코드를 실행하려면 다음과 같이 작성하자.

    import org.junit.jupiter.api.condition.EnabledOnOs;
    import org.junit.jupiter.api.condition.OS;
    import static org.junit.jupiter.api.Assumptions.assumingThat;
    
    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        @EnabledOnOs(OS.MAC)
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
            assumingThat("LOCAL".equalsIgnoreCase(test_env),()->{
                System.out.println("LOCAL환경변수입니다.");
            });
            assumingThat("SeongJun".equalsIgnoreCase(test_env),()->{
                System.out.println("SeongJun환경변수입니다.");
            });
        }
    }

    다음 예제도 보자 

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        @EnabledOnOs(OS.MAC)
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
        }
        @Test
        @DisabledOnOs(OS.MAC)
        void create_again_study_test(){
            System.out.println("다른 테스트 ");
        }
    }

    OS가 맥일경우엔 DisabledonOS에너테이션을 적용해 주었기때문에 실행되지 않은 것을 볼 수 있다.

     

    그외 다양한 환경에 조건을 주는 방법은 계속되는 예조코드를 보자.


    예제코드4. 자바 버전에 따른 테스트코드 실행 여부(@enabledonJre, @disabledonJre)코드

    본인은 자바 8버전을 사용하고 있다.

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        @EnabledOnJre(JRE.JAVA_8)
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
        }
        @Test
        @DisabledOnJre(JRE.JAVA_8)
        void create_again_study_test(){
            System.out.println("다른 테스트 ");
        }
    }

    만약 제약하는 버전을 추가하고 싶다면 다음과 같이 작성한다.

    @EnabledOnJre({JRE.JAVA_8,JRE.JAVA_9,JRE.JAVA_10})

    자바 7버전 이하 다른 버전은 다음과 같이 사용한다.

    @DisabledOnJre(JRE.OTHER)

    예제코드5. @IfEnvironmentVariable

    앞에서 살펴보았던 예제코드1에서 환경변수 조건에 따라 assumeTrue와 assumingThat메서드를 이용해 테스트를 실행 시키는 구문을 작성했는데, 이번엔 에노테이션을 사용한 방법으로 실시한다.

    (+)예제코드 1,2를 보았다면 TEST_ENV환경변수 값이 변경된 것을 알 수 있겠는데, 본인은 아직 IDE를 재시작하지 않아 변경되지 않은 값(local)로 설정되어 있다.

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        @EnabledIfEnvironmentVariable(named = "TEST_ENV",matches = "local")
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
        }
        @Test
        @DisabledIfEnvironmentVariable(named = "TEST_ENV",matches = "local")
         void create_again_study_test(){
            System.out.println("다른 테스트 ");
        }
    }

     

    '테스트 > Junit5' 카테고리의 다른 글

    커스텀 태그  (0) 2021.02.02
    태깅과 필터링  (0) 2021.02.02
    Assertion API  (0) 2021.01.28
    테스트 이름 표시하기  (0) 2021.01.28
    Junit 기본 어노테이션  (0) 2021.01.27
Designed by Tistory.