본문 바로가기
스프링/JUnit

[JUnit] @Tag, 테스트의 태깅과 필터링

by 책 읽는 개발자_테드 2020. 12. 3.
반응형

이 글은 인프런 - 더 자바, 애플리케이션을 테스트하는 다양한 방법 강의를 학습하며 정리한 내용입니다.

www.inflearn.com/course/the-java-application-test

 

( intellij에서 JUnit5의 설정이 완료되었다는 가정하에 글을 작성합니다. )

(때문에 JUnit5 사용방법을 모르시는 분들은 다음글을 참고해 주세요.  scshim.tistory.com/175 )

 

@Tag, 테스트의 태깅과 필터링

테스트 그룹을 만들고 원하는 테스트 그룹만 테스트를 실행할 수 있는 기능입니다.

 

@Tag

테스트 메소드 위에 @Tag 애너테이션과 함께 이름을 추가해서 태그를 설정합니다. 하나의 테스트 메소드에 여러 태그를 사용할 수 있습니다.

 

예시로 태그가 없는 다음과 같은 코드가 있다고 가정합니다.

class StudyTest {

        @Test
        @DisplayName("스터디 만들기 fast")
        
        void create_new_study() {
                System.out.println("스터디 만들기 fast");
        }
        
        @Test
        @DisplayName("스터디 만들기 slow")
        void create_new_study_again() {
                System.out.println("스터디 만들기 slow");
        }

        @BeforeAll
        static void beforeAll(){
                System.out.println("before all");
        }

        @AfterAll
        static void afterAll(){
                System.out.println("before all");
        }

        @BeforeEach
        void beforEach(){
                System.out.println("before each");
        }

        @AfterEach
        void afterEach(){
                System.out.println("after each");
        }
}

 

위 코드의 실행 결과는 다음과 같습니다.

 

이번에는 원하는 테스트 메소드 위해 태그를 추가합니다.

class StudyTest {

        @Test
        @DisplayName("스터디 만들기 fast")
        @Tag("fast")
        void create_new_study() {
                System.out.println("스터디 만들기 fast");
        }

        @Test
        @DisplayName("스터디 만들기 slow")
        @Tag("slow")
        void create_new_study_again() {
                System.out.println("스터디 만들기 slow");
        }

        @BeforeAll
        static void beforeAll(){
                System.out.println("before all");
        }

        @AfterAll
        static void afterAll(){
                System.out.println("before all");
        }

        @BeforeEach
        void beforEach(){
                System.out.println("before each");
        }

        @AfterEach
        void afterEach(){
                System.out.println("after each");
        }
}

 

그리고 intellij 상단에 Edit Configurations를 클릭,

 

Run/Debug Configuration 화면이 켜지면 Test kind를 Tags로 변경합니다.

 

마지막으로 Tag expression에 실행을 원하는 Tag를 입력하고, 

 

테스트를 실행하면 다음과 같이 원하는 테스트 메소드만 실행할 수 있습니다.

 

커스텀 태그

커스텀 태그는 직접 특정한 태그를 만들어 사용하는 방식입니다. 이렇게 미리 커스텀 태그를 만들고, 여러번 사용하면 코드의 중복과 태그의 오타가 발생할 확률을 줄일 수 있습니다.

 

커스텀 태그를 사용해서 위의 테스트 코드를 수정합니다.

1. 커스텀 태그를 만들기

@Retention(RetentionPolicy.RUNTIME) // 에너테이션을 사용한 코드가 해당 애너테이션의 정보를 런타임에도 유지해야한다.
@Target(ElementType.METHOD) //이 애너테이션은 메소드에 사용할 수 있다. 
@Tag("fast")
@Test
public @interface FastTest {
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Tag("slow")
@Test
public @interface SlowTest {
}

 

2. 기존의 태그를 커스텀 태그로 변경하기

class StudyTest {

        @FastTest
        @DisplayName("스터디 만들기 fast")
        void create_new_study() {
                System.out.println("스터디 만들기 fast");
        }

        @SlowTest
        @DisplayName("스터디 만들기 slow")
        void create_new_study_again() {
                System.out.println("스터디 만들기 slow");
        }

        @BeforeAll
        static void beforeAll(){
                System.out.println("before all");
        }

        @AfterAll
        static void afterAll(){
                System.out.println("before all");
        }

        @BeforeEach
        void beforEach(){
                System.out.println("before each");
        }

        @AfterEach
        void afterEach(){
                System.out.println("after each");
        }
}

커스텀 태그를 사용할 일이 많아 질수록 코드가 깔끔해지겠죠?

 

Maven 사용하기

Edit Configurations과 똑같은 결과를 만들기 위해 pom.xml 파일을 수정해서 Mavn을 통해 원한는 태그를 실행할 수 있습니다.

 

먼저 프로젝트의 pom.xml에 다음과 같이 surefire plugin을 이용한 설정을 추가합니다.

	<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>

 

그리고 다시 ./mvnw test 를 intellij 터미널에 입력하여 테스트를 진행하면, 원하는 태그의 테스트 메소드만 실행되는 걸 확인할 수 있습니다.

반응형

댓글