@ValueAutoSource
@ValueAutoSource
어노테이션은 @ValueSource
와 @AutoSource
의 기능을 결합하여 테스트 인수를 생성하는 더 유연한 방법을 제공합니다. 구체적으로, 첫 번째 매개변수에 미리 정의된 값을 할당하고 나머지 매개변수에 대해 임의의 값을 생성합니다.
사용 방법
@ValueAutoSource
어노테이션을 사용하려면 테스트 메서드 위에 어노테이션을 추가하고 @ValueSource
와 마찬가지로 strings
, ints
등의 속성을 사용하여 첫 번째 매개변수의 값을 지정합니다.
다음은 그 예입니다.
- Java
- Kotlin
@ParameterizedTest
@ValueAutoSource(strings = {"foo"})
void testMethod(String arg1, String arg2) {
assertEquals("foo", arg1);
assertNotEquals(arg1, arg2);
}
@ParameterizedTest
@ValueAutoSource(strings = ["foo"])
fun testMethod(arg1: String, arg2: String) {
assertEquals("foo", arg1)
assertNotEquals(arg1, arg2)
}
이 경우, arg1
은 "foo"
로 설정되고, arg2
는 자동으로 생성된 값을 받습니다. 이 테스트는 arg1
이 정확히 "foo"
이고 arg2
가 arg1
과 다르다는 것을 확인합니다.
@Freeze와의 호환성
@ValueAutoSource
어노테이션은 @Freeze
어노테이션과 완벽하게 호환되므로 특정 매개변수 값을 수정하는 동시에 다른 매개변수에 대해 미리 정의된 값을 제공할 수 있습니다.
함께 작동하는 방식은 다음과 같습니다.
- Java
- Kotlin
@AllArgsConstructor
@Getter
public class ValueContainer {
private final String value;
}
class ValueContainer(val value: String)
- Java
- Kotlin
@ParameterizedTest
@ValueAutoSource(strings = {"foo"})
void testMethod(@Freeze String arg1, String arg2, ValueContainer arg3) {
assertEquals("foo", arg2);
assertEquals("foo", arg3.getValue());
}
@ParameterizedTest
@ValueAutoSource(strings = ["foo"])
fun testMethod(@Freeze arg1: String, arg2: String, arg3: ValueContainer) {
assertEquals("foo", arg2)
assertEquals("foo", arg3.value)
}
혜택
- 고정 및 난수 값 결합:
@ValueAutoSource
를 사용하면 특정 매개변수 값을 지정하는 동시에 다른 매개변수에 대해 AutoParams가 임의의 값을 생성하도록 하여 두 가지의 장점을 모두 활용할 수 있습니다. - 향상된 유연성: 이 기능을 사용하면 테스트 데이터를 더 잘 제어할 수 있어 다양한 시나리오를 보다 쉽게 다룰 수 있습니다.
- 테스트 복잡성 감소:
@ValueSource
와@AutoSource
의 기능을 결합하면 테스트 설정이 간소화되어 읽기 및 유지 관리가 더 쉬워집니다.
@ValueAutoSource
어노테이션은 테스트 툴킷에 다재다능한 기능을 추가하여, 자동화된 무작위 데이터 생성의 이점을 유지하면서도 테스트 데이터를 효과적으로 제어할 수 있습니다.