테스트/Junit5

태깅과 필터링

jjunbbang 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 태그)의 테스트가 실행되는 것을 알 수 있다.