Study/Java

[JUnit5] @ParameterizedTest 애노테이션(반복 테스트) 커스텀 하기

검프 2021. 10. 20. 01:28

반복 테스트(ParameterizedTest)에 대한 출력을 통일성 있게 하고싶어 아래와 같은 옵션들을 지정했어요.

@ParameterizedTest(name = "{displayName} {index}, args = {arguments}")
@DisplayName("사용자 생성 - 성공")
@ParameterizedTest(name = "{displayName} {index}, args = {arguments}")
@ValueSource(strings = {"ㅁㅇㄹㅁㅇㄹ", "ㅓㅓㅓㅓ", "adfdf", "검프", "검프23213"})
void save(String name) {
...
}

테스트 출력시

https://user-images.githubusercontent.com/48986787/137952034-e51a6530-805d-43cc-b7ad-4ee25610e0f1.png

위와 같이 나오며, "반복 테스트의 이름, 실행 번호, 파라미터"와 같은 형식으로 나오게 했어요.
정말 좋은데, 이러한 형식을 사용하기 위해 @ParameterizedTest를 사용하는 모든 곳에 위와 같은 옵션을 줘야해요.

귀찮지 않나?

맞아요. 테스트가 한 두개면 모르겠는데, 100개 이상인 반복 테스트에서 일일이 위와 같은 형식으로 작성하는 것은 문제가 있어요.

애노테이션 선언 (테스트 폴더에서)

#test/java/com/cvi 
package com.cvi;

import org.junit.jupiter.params.ParameterizedTest;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@ParameterizedTest(name = "{displayName} {index}, args = {arguments}")
public @interface CustomParameterizedTest {
}

커스텀한 ParameterizeTest를 만들었어요.

자세히 보면, 선언 위치는 애노테이션 타입과, 메소드에서, 실행시점은 런타임 시간에 작동하기로 선언하고, @ParameterizedTest와 옵션을 함께 정의했어요.

이게 되는 이유는 JUnit5에서 애노테이션을 조합하여 커스텀한 애노테이션을 만들 수 있게 지원하기 때문이에요.
여튼 이제, 반복 테스트 즉, @ParameterizedTest를 사용하는 곳에서는 동일한 출력을 보장할 수 있게 됐어요 😂

@DisplayName("사용자 생성 - 성공")
@CustomParameterizedTest
@ValueSource(strings = {"ㅁㅇㄹㅁㅇㄹ", "ㅓㅓㅓㅓ", "adfdf", "검프", "검프23213"})
void save(String name) {
...
}