ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 태깅과 필터링
    테스트/Junit5 2021. 2. 2. 15:59

    테스트 태깅이란

    테스트 그룹을 만들고 원하는 테스트 그룹만 테스트를 실행할 수 있는 방법이다.

    즉 어떤 테스트는 단위 테스트인지, 통합 테스트인지 구분하거나 실행시간 등 여러가지 조건을 생각해서 실행한 테스트 그룹에 태그를 붙일 수 있다.

    @Tag

    • 에너테이션을 사용하여 태스트를 그룹화 시킬 수 있다.
    • 하나의 테스트 메소드에 여러 태그도 사용 가능하다.

    이 글에서 태깅과 필터링 하는 방법을 Intellij, maven build 두 가지로 설명하고자 한다.


    예제1. Intellij에서 태깅및 필터링

    @DisplayName("스터디 클레스")
    class StudyTest {
    
        @Test
        @DisplayName("스터디 만들기☺️")
        @Tag("fast") //로컬환경에서
        void create_new_study_test() {
            String test_env = System.getenv("TEST_ENV"); //환경변수를 받환
            System.out.println(test_env);
        }
    
        @Test
        @Tag("slow") //원격환경에서
         void create_again_study_test(){
            System.out.println("다른 테스트 ");
        }
    }

    만약 fast란 이름의 태그 테스트는 실행시간이 빠르다는 가정을 하고 로컬환경에서 실행시킨다고 가정하자. 마찬가지로 slow는 느리기 때문에 속도를 낼 수 있는 환경에서만 실행한다고 가정하자. 우리는 로컬 환경에서 실험하기 때문에 fast그룹만 테스트 하고 싶다는 걸 인식하고 보자.

    하지만 태그를 지정해도, Junit5에선 클래스 단위로 테스트를 실행하기 때문에 그전과 같이 모든 테스트가 실행된다. 하지만 Tag이름에 따라 즉, fast태그의 테스트만 실행하고 싶으면 다음과 같이 설정한다.

    Intellij 우측상단 -> Edit Configurations -> 

    class로 설정된 것은 Test Kind로 기본적으로 인텔리제이에서 설정된 값이다 이 값을 Tag로 바꾸어주고 그룹값을 fast로 입력한다.

    이렇게 하면 특정한 태그로 테스트 필터링이 적용되어 fast 태그만 실행해 다음과 같은 값이 나온다.


    예제2. 메이븐을 이용한 필터링 방법

    먼저 profile태그를 사용하려고 하는데 그 이유에 대해서 잠깐 얘기해보겠다.

    profile 태그는 메이븐의 이식성(portability)을 제공하고자 하는 태그로 <id>태그로 profile각각을 인식하고 해당하는 pulgin이나 프로퍼티 를 설정할 수 있다. -> 이렇게 되면 기존 소스코드 수정 없이도 다양한 환경에서 빌드할 수 있게된다.

    따라서 본 글에선 profile태그에서 빌드 환경에따라 실행 하고자 하는 id를 설정하고 해당 id가 가지는 설정을 통해 테스트 그룹을 실행하고자 한다.

     

     

    터미널에서 메이븐 test 빌드하기

    필터링이 적용 되지 않는것을 알 수 있다.

    pom.xml에서 다음과 같이 설정하자. -> 다른 환경에서 다른 테스트를 하기 위해서

    <profiles>
            <profile>
                <id>default</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <build>
                    <plugins>
                        <plugin>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <configuration>
                                <groups>fast</groups>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>

    이렇게 하면 메이븐 빌드를 할때, 별도의 프로파일 id없이도 default로 fast 태그를 필터해서 테스트한다.

    <activeByDefault>태그를 사용해서 프로젝트가 빌드 될 때 자동으로 해당 profile에 설정된 fast태그를 필터링한다. 

    만약 다른 환경에서 slow와 fast 테스트를 실행하고 싶다면 다음과 같이 설정한다.

     <profiles>
            <profile>
                <id>default</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <build>
                    <plugins>
                        <plugin>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <configuration>
                                <groups>fast</groups>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
            <profile>
                <id>ci</id>
                <build>
                    <plugins>
                        <plugin>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <configuration>
                                <groups>slow | fast</groups>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>

    터미널 명령어는 다음과 같다.

     ./mvnw test -P ci
    

    2개(slow,fast 태그)의 테스트가 실행되는 것을 알 수 있다.

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

    테스트 반복하기  (0) 2021.02.02
    커스텀 태그  (0) 2021.02.02
    조건에 따라 테스트 실행하기  (0) 2021.02.02
    Assertion API  (0) 2021.01.28
    테스트 이름 표시하기  (0) 2021.01.28
Designed by Tistory.