본문으로 건너뛰기

@MethodAutoSource

@MethodAutoSource 어노테이션은 @MethodSource@AutoSource의 기능을 혼합합니다. 이를 통해 초기 매개변수 집합에 대한 팩토리 메서드 이름을 지정하고 나머지 매개변수는 임의의 값이 자동으로 채웁니다.

사용 방법

@MethodAutoSource를 사용하려면 테스트 메서드에 어노테이션을 달고 초기 매개변수에 대한 인수 값을 제공하는 팩토리 메서드를 지정합니다. AutoParams는 나머지 매개변수에 대한 값을 생성합니다.

간단한 예를 들어보겠습니다.

@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"));
}

이 경우, arg1arg2factoryMethod에서 제공된 값이 설정됩니다. arg3에는 무작위로 생성된 값이 할당되고, 테스트는 arg3arg2와 같지 않음을 확인합니다.

@Freeze와의 호환성

@MethodAutoSource 어노테이션은 @Freeze 어노테이션과도 완벽하게 호환됩니다. 이 팩토리 메서드를 통해 다른 매개변수를 동적으로 채우는 동안 특정 매개변수에 대한 값을 잠글 수 있습니다.

함께 이용하는 방법은 다음과 같습니다.

@AllArgsConstructor
@Getter
public class ValueContainer {
private final String value;
}
@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"));
}

Benefits

  1. 사용자 정의 기능: 일부 매개변수에 대한 팩토리 메서드를 지정할 수 있는 기능을 통해 고도로 맞춤화된 테스트 설정이 가능합니다.
  2. 단순성: @MethodAutoSource는 나머지 매개변수에 대한 값을 자동으로 생성하므로 광범위한 수동 데이터 준비의 필요성을 해소합니다.
  3. 유연성: 이 기능을 사용하면 미리 정의된 값과 무작위 값을 결합하여 폭넓은 시나리오를 테스트할 수 있습니다.

@MethodAutoSource 어노테이션은 매개변수화된 테스트에서 제어와 무작위성의 균형 잡힌 조합을 제공하여 테스트 툴킷을 풍부하게 만듭니다.