ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • properties파일로 JUnit5 설정하기
    테스트/Junit5 2021. 2. 8. 14:33

    우리가 그동안 살펴보았던 @Disabled, 인스턴스 라이프사이클, 테스트 이름 표기 등 Annotation으로 테스트를 제어 해왔지만, 이번 시간에는 properties파일로 테스트를 설정하고자 한다.

     

    ※본 글에선 intellij IDE로 실습한다


    1. properties파일 생성하기

     

    먼저 테스트 폴더에 resources 디렉토리를 만든후 junit-platform.properties이란 파일을 생성한다.

    후에 Project structure -> Module에서 우리가 방금 만든 테스트 폴더를 Test Resources로 Class Path로 경로를 잡아준다.


    2. 생성한 properties파일로, 모든 테스트 라이프 사이클을 클레스 인스턴스로 적용하기

    생성한 properties 파일에 다음과 같은 설정을 적어준다.

    junit.jupiter.testinstance.lifecycle.default = per_class

    package com.example.junittest;
    
    import org.junit.jupiter.api.*;
    
    @DisplayName("스터디 클레스")
    class StudyTest {
        int value = 1;
    
        @Test
        @DisplayName("메서드 1️")
        @Order(2)
        void create_new_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @Test
        @DisplayName("메서드 2")
        @Order(1)
            //원격환경에서
        void create_again_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @BeforeAll
        static void beforeall() {
            System.out.println("BEFORE ALL");
        }
    
        @AfterAll
        static void afterall() {
            System.out.println("AFTER ALL");
        }
    }

    [결과]

    우리가 전 시간에 배웠던 @TestInstace LifeCycle를 통해 메소드마다 테스트 인스턴스를 컨트롤 했었다. 하지만 위에 소스코드와 같이

    아무런 설정이 없어도 properties파일로 통해 lifecycle default값을 클래스로 주었기 때문에 공용으로 사용하는 value을 변환시켜도 각각의 메서드에서 그 변경된 값을 활용할 수 있게된다. -> Lifecycle이 Method인 경우 메소드마다 인스턴스를 따로 생성하기 때문에 원래는 value값을 다른 메소드(create_new_study_test)에서 1증가시켜도, 그 값이 다른 메소드(create_again_study_test)에선 value값이 1이였다.


    3. properties파일에 @Disabled 어노테이션을 무시하고 테스트를 실행할 수 있는 설정.

     

    -properties파일 변경전-

    junit.jupiter.testinstance.lifecycle.default = per_class
    package com.example.junittest;
    
    import org.junit.jupiter.api.*;
    
    @DisplayName("스터디 클레스")
    class StudyTest {
        int value = 1;
    
        @Test
        @DisplayName("메서드 1️")
        @Order(2)
        void create_new_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @Test
        @Disabled
        @DisplayName("메서드 2")
        @Order(1)
            //원격환경에서
        void create_again_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @BeforeAll
        static void beforeall() {
            System.out.println("BEFORE ALL");
        }
    
        @AfterAll
        static void afterall() {
            System.out.println("AFTER ALL");
        }
    }

    이러한 @disabled 어노테이션을 무시하고 실행하는 방법은 properties파일에 다음과 같은 설정해준다.

     

    -변경후-

    junit.jupiter.testinstance.lifecycle.default = per_class
    junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition

    [결과]

     

    또한 환경에따라 무시하는 DisabledonOS , JRE을 설정하고 싶으면 properties파일에 풀패키지 이름을 설정하면 된다.

    junit.jupiter.testinstance.lifecycle.default = per_class
    junit.jupiter.conditions.deactivate = org.junit.jupiter.api.condition.DisabledOnOsCondition
    
    package com.example.junittest;
    
    import org.junit.jupiter.api.*;
    import org.junit.jupiter.api.condition.DisabledOnJre;
    import org.junit.jupiter.api.condition.DisabledOnOs;
    import org.junit.jupiter.api.condition.JRE;
    import org.junit.jupiter.api.condition.OS;
    
    @DisplayName("스터디 클레스")
    class StudyTest {
        int value = 1;
    
        @Test
        @DisplayName("메서드 1️")
        @DisabledOnJre(JRE.JAVA_8)
        @Order(2)
        void create_new_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @Test
        @DisabledOnOs(OS.MAC)
        @DisplayName("메서드 2")
        @Order(1)
        void create_again_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @BeforeAll
        static void beforeall() {
            System.out.println("BEFORE ALL");
        }
    
        @AfterAll
        static void afterall() {
            System.out.println("AFTER ALL");
        }
    }

    참고로 필자는 JDK8, MAC을 사용하고 있다.


    properties파일로 테스트이름 표기 전략 설정하기

    package com.example.junittest;
    
    import org.junit.jupiter.api.*;
    import org.junit.jupiter.api.condition.DisabledOnJre;
    import org.junit.jupiter.api.condition.DisabledOnOs;
    import org.junit.jupiter.api.condition.JRE;
    import org.junit.jupiter.api.condition.OS;
    
    @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
    @DisplayName("스터디 클레스")
    class StudyTest {
        int value = 1;
    
        @Test
        @DisabledOnJre(JRE.JAVA_8)
        @Order(2)
        void create_new_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @Test
        @DisabledOnOs(OS.MAC)
        @Order(1)
        void create_again_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @BeforeAll
        static void beforeall() {
            System.out.println("BEFORE ALL");
        }
    
        @AfterAll
        static void afterall() {
            System.out.println("AFTER ALL");
        }
    }

    _(언더바) -> " "(공백)으로 테스트 이름을 바꾸어주는 전략인 @DisplayNameGeneration 어노테이션을 통해 바꾸어 주었다면 이 전략을 properties파일로 작성할 수 있다. 다음과 같이 properties파일에 작성해주자.

    junit.jupiter.testinstance.lifecycle.default = per_class
    junit.jupiter.conditions.deactivate = org.junit.jupiter.api.condition.DisabledOnOsCondition
    junit.jupiter.displayname.generator.default = org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores
    package com.example.junittest;
    
    import org.junit.jupiter.api.*;
    import org.junit.jupiter.api.condition.DisabledOnJre;
    import org.junit.jupiter.api.condition.DisabledOnOs;
    import org.junit.jupiter.api.condition.JRE;
    import org.junit.jupiter.api.condition.OS;
    
    @DisplayName("스터디 클레스")
    class StudyTest {
        int value = 1;
    
        @Test
        @DisabledOnJre(JRE.JAVA_8)
        @Order(2)
        void create_new_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @Test
        @DisabledOnOs(OS.MAC)
        @Order(1)
        void create_again_study_test() {
            System.out.println(value);
            value++;
            System.out.println(this);
        }
    
        @BeforeAll
        static void beforeall() {
            System.out.println("BEFORE ALL");
        }
    
        @AfterAll
        static void afterall() {
            System.out.println("AFTER ALL");
        }
    }

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

    Junit5에서 Junit4마이그레이션 하기  (0) 2021.02.08
    JUnit5 확장 모델  (0) 2021.02.08
    테스트 순서  (0) 2021.02.06
    테스트 인스턴스  (0) 2021.02.06
    테스트 반복하기2 @ParameterizedTest이용한 추가 방법  (0) 2021.02.02
Designed by Tistory.