@MethodAutoSource
@MethodAutoSource
어노테이션은 @MethodSource
와 @AutoSource
의 기능을 혼합합니다. 이를 통해 초기 매개변수 집합에 대한 팩토리 메서드 이름을 지정하고 나머지 매개변수는 임의의 값이 자동으로 채웁니다.
사용 방법
@MethodAutoSource
를 사용하려면 테스트 메서드에 어노테이션을 달고 초기 매개변수에 대한 인수 값을 제공하는 팩토리 메서드를 지정합니다. AutoParams는 나머지 매개변수에 대한 값을 생성합니다.
간단한 예를 들어보겠습니다.
- Java
- Kotlin
@ParameterizedTest
@MethodAutoSource("factoryMethod")
void testMethod(int arg1, String arg2, String arg3) {
assertEquals(16, arg1);
assertEquals("foo", arg2);
assertNotEquals(arg2, arg3);
}
static Stream<Arguments> factoryMethod() {
return Stream.of(Arguments.of(16, "foo"));
}
@ParameterizedTest
@MethodAutoSource("factoryMethod")
fun testMethod(arg1: Int, arg2: String, arg3: String) {
assertEquals(16, arg1)
assertEquals("foo", arg2)
assertNotEquals(arg2, arg3)
}
companion object {
@JvmStatic
fun factoryMethod(): Stream<Arguments> {
return Stream.of(Arguments.of(16, "foo"))
}
}
이 경우, arg1
과 arg2
는 factoryMethod
에서 제공된 값이 설정됩니다. arg3
에는 무작위로 생성된 값이 할당되고, 테스트는 arg3
가 arg2
와 같지 않음을 확인합니다.
@Freeze와의 호환성
@MethodAutoSource
어노테이션은 @Freeze
어노테이션과도 완벽하게 호환됩니다. 이 팩토리 메서드를 통해 다른 매개변수를 동적으로 채우는 동안 특정 매개변수에 대한 값을 잠글 수 있습니다.
함께 이용하는 방법은 다음과 같습니다.
- Java
- Kotlin
@AllArgsConstructor
@Getter
public class ValueContainer {
private final String value;
}
class ValueContainer(val value: String)
- Java
- Kotlin
@ParameterizedTest
@MethodAutoSource("factoryMethod")
void testMethod(int arg1, @Freeze String arg2, ValueContainer arg3) {
assertEquals("foo", arg3.getValue());
}
static Stream<Arguments> factoryMethod() {
return Stream.of(Arguments.of(16, "foo"));
}
@ParameterizedTest
@MethodAutoSource("factoryMethod")
fun testMethod(arg1: Int, @Freeze arg2: String, arg3: ValueContainer) {
assertEquals("foo", arg3.value)
}
companion object {
@JvmStatic
fun factoryMethod(): Stream<Arguments> {
return Stream.of(Arguments.of(16, "foo"))
}
}
Benefits
- 사용자 정의 기능: 일부 매개변수에 대한 팩토리 메서드를 지정할 수 있는 기능을 통해 고도로 맞춤화된 테스트 설정이 가능합니다.
- 단순성:
@MethodAutoSource
는 나머지 매개변수에 대한 값을 자동으로 생성하므로 광범위한 수동 데이터 준비의 필요성을 해소합니다. - 유연성: 이 기능을 사용하면 미리 정의된 값과 무작위 값을 결합하여 폭넓은 시나리오를 테스트할 수 있습니다.
@MethodAutoSource
어노테이션은 매개변수화된 테스트에서 제어와 무작위성의 균형 잡힌 조합을 제공하여 테스트 툴킷을 풍부하게 만듭니다.