@Tag
공통되는 특징을 가지는 테스트들을 묶고 싶을 때가 있습니다.
예를 들어 테스트 실행 시간이 10초 이상 걸리는 테스트들을 느린 테스트로 가정하고, 그 아래로 걸리는 테스트들을 빠른 테스트로 가정해 빠른 테스트들만 실행하려고 합니다. 이런 경우 @Tag가 빛을 발합니다.
public class TaggingAndFilteringTest {
@DisplayName("느린 테스트 1")
@Tag("slow")
@Test
public void slowTest1(){
System.out.println("느린 테스트 1 진행");
}
@DisplayName("느린 테스트 2")
@Tag("slow")
@Test
public void slowTest2(){
System.out.println("느린 테스트 2 진행");
}
@DisplayName("빠른 테스트 1")
@Tag("fast")
@Test
public void fastTest1(){
System.out.println("빠른 테스트 1 진행");
}
@DisplayName("빠른 테스트 2")
@Tag("fast")
@Test
public void fastTest2(){
System.out.println("빠른 테스트 2 진행");
}
}
@Tag("태그명")을 통해 각 메서드들을 태그명 별로 태깅할 수 있습니다.
커스텀 태그 만들기
일일히 태그명을 쓰기 귀찮은 경우 어노테이션으로 바로 선언하고 싶다면 커스텀 태그를 만드는 것이 좋습니다.
각 커스텀 태그들은 어노테이션을 만드는 방식과 똑같습니다.
@Target(ElementType.METHOD) // 선언할 수 있는 타입
@Retention(RetentionPolicy.RUNTIME) // 어느시점까지 어노테이션 메모리를 가져갈 것인가?
@Test // @Test까지 생략 가능하게끔
@Tag("fast")
public @interface FastTest {
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("slow")
@Test
public @interface SlowTest {
}
이렇게 태그를 만들었으면 윗 코드를 변경해 봅시다.
public class TaggingAndFilteringTest {
@DisplayName("느린 테스트 1")
@SlowTest
public void slowTest1(){
System.out.println("느린 테스트 1 진행");
}
@DisplayName("느린 테스트 2")
@SlowTest
public void slowTest2(){
System.out.println("느린 테스트 2 진행");
}
@DisplayName("빠른 테스트 1")
@FastTest
public void fastTest1(){
System.out.println("빠른 테스트 1 진행");
}
@DisplayName("빠른 테스트 2")
@FastTest
public void fastTest2(){
System.out.println("빠른 테스트 2 진행");
}
}
테스트 실행
이렇게 태그를 만든 후 실행하는 방법은 여러 가지가 있습니다. 여기서는 IntelliJ 실행을 살펴봅시다.
실행 설정에서 태그와 태그 명을 입력후...
만든 Run으로 테스트를 실행하면 필터링이 잘 되는 것을 알 수 있습니다.
'JAVA > JUnit' 카테고리의 다른 글
[JUnit5] 테스트 작성(6) - Nested Test (0) | 2021.10.12 |
---|---|
[JUnit5] 테스트 작성(5) - 라이프사이클과 테스트 순서(Order) (0) | 2021.10.12 |
[JUnit5] 테스트 작성(3) - Assumptions와 테스트 필터링 (0) | 2021.10.08 |
[JUnit5] 테스트 작성(2) - Assertions (0) | 2021.10.08 |
[JUnit5] 테스트 작성(1) - 전체적인 틀 + 이름 작성 (0) | 2021.10.08 |