@CsvAutoSource
@CsvAutoSource
어노테이션은 @CsvSource
와 @AutoSource
의 기능을 통합하여 일부 매개변수에 대해 CSV 형식의 인수를 지정하고 나머지 매개변수에 대해 무작위 값을 생성하는 유연성을 제공합니다.
사용 방법
@CsvAutoSource
를 사용하려면 테스트 메서드에 어노테이션을 달고 초기 매개변수 집합에 대한 CSV 형식의 입력 값을 제공합니다. 나머지 매개변수는 자동으로 생성된 값으로 채워집니다.
간단한 예를 보겠습니다.
- Java
- Kotlin
@ParameterizedTest
@CsvAutoSource({"16, foo"})
void testMethod(int arg1, String arg2, String arg3) {
assertEquals(16, arg1);
assertEquals("foo", arg2);
assertNotEquals(arg2, arg3);
}
@ParameterizedTest
@CsvAutoSource("16, foo")
fun testMethod(arg1: Int, arg2: String, arg3: String) {
assertEquals(16, arg1)
assertEquals("foo", arg2)
assertNotEquals(arg2, arg3)
}
이 예제는 제공된 CSV 입력에 따라 arg1
은 16
으로 설정되고 arg2
는 "foo"
로 설정됩니다. 한편, arg3
은 무작위로 생성된 값이 할당됩니다. 이 테스트는 arg3
가 arg2
와 다르다는 것을 확인합니다.
@Freeze와의 호환성
@ValueAutoSource
와 마찬가지로 @CsvAutoSource
는 @Freeze
주석과 완벽하게 호환되므로 특정 매개변수의 값을 고정하는 동시에 CSV를 통해 다른 매개변수를 정의할 수 있습니다.
함께 작동하는 방식은 다음과 같습니다.
- Java
- Kotlin
@AllArgsConstructor
@Getter
public class ValueContainer {
private final String value;
}
class ValueContainer(val value: String)
- Java
- Kotlin
@ParameterizedTest
@CsvAutoSource({"16, foo"})
void testMethod(int arg1, @Freeze String arg2, ValueContainer arg3) {
assertEquals("foo", arg3.getValue());
}
@ParameterizedTest
@CsvAutoSource("16, foo")
fun testMethod(arg1: Int, @Freeze arg2: String, arg3: ValueContainer) {
assertEquals("foo", arg3.value)
}
혜택
- 이중 제어: 일부 매개변수에 대해서는 CSV를 통해 값을 지정하고 다른 매개변수에 대해서는 자동 난수 생성을 허용하는 기능을 통해 테스트 데이터에 대한 높은 수준의 제어가 가능합니다.
- 간소화된 테스트: 수동 및 자동 데이터 입력을 모두 허용함으로써
@CsvAutoSource
는 복잡한 테스트 설정을 간소화합니다. - 유연하고 포괄적: 이 기능을 사용하면 사전 정의된 값과 무작위 값을 혼합하여 더 광범위한 테스트 시나리오를 포괄할 수 있는 유연성을 제공합니다.
@CsvAutoSource
어노테이션은 테스트 도구 모음의 또 다른 다재다능한 도구로, 매개변수화된 테스트에 정밀도와 커버리지를 모두 추가합니다.