소개
AutoParams는 Java에서 매개변수화된 테스트를 위해 설계된 임의의 테스트 데이터 생성기로, AutoFixture에서 영감을 얻었습니다.
테스트 데이터를 수동으로 구성하는 것은 번거로울 수 있으며, 특히 특정 데이터가 필요하지만 특정 테스트에 중요하지 않은 경우 더욱 그렇습니다. AutoParams는 매개변수화된 메서드에 대한 테스트 인수를 자동으로 생성하여 이러한 번거로움을 없애고 도메인별 요구 사항에 더 집중할 수 있도록 합니다.
AutoParams를 사용하는 것은 간단합니다. @ValueSource
또는 @CsvSource
주석을 사용하는 것과 같은 방식으로 매개변수화된 테스트 메서드에 @AutoSource
주석을 달기만 하면 됩니다. 이 작업이 완료되면 AutoParams가 적절한 테스트 인수를 자동으로 생성합니다.
- Java
- Kotlin
@ParameterizedTest
@AutoSource
void parameterizedTest(int a, int b) {
Calculator sut = new Calculator();
int actual = sut.add(a, b);
assertEquals(a + b, actual);
}
@ParameterizedTest
@AutoSource
fun parameterizedTest(a: Int, b: Int) {
val sut = Calculator()
val actual: Int = sut.add(a, b)
assertEquals(a + b, actual)
}
- Java
- Kotlin
@ParameterizedTest
@AutoSource
void parameterizedTest(int a, int b) {
Calculator sut = new Calculator();
int actual = sut.add(a, b);
assertEquals(a + b, actual);
}
@ParameterizedTest
@AutoSource
fun parameterizedTest(a: Int, b: Int) {
val sut = Calculator()
val actual: Int = sut.add(a, b)
assertEquals(a + b, actual)
}
위의 예에서 AutoParams에 의한 테스트 데이터의 자동 생성은 잠재적으로 테스트에서 삼각 측량의 필요성을 없애 테스트 프로세스를 간소화할 수 있습니다.
AutoParams는 또한 테스트 설정 코드 작성을 간소화합니다. 예를 들어, 단일 제품에 대한 여러 리뷰 엔터티를 생성해야 하는 경우 @Freeze
주석을 사용하여 이를 손쉽게 달성할 수 있습니다.
- Java
- Kotlin
@AllArgsConstructor
@Getter
public class Product {
private final UUID id;
private final String name;
private final BigDecimal priceAmount;
}
class Product (val id: UUID, val name: String, val priceAmount: BigDecimal)
- Java
- Kotlin
@AllArgsConstructor
@Getter
public class Review {
private final UUID id;
private final Product product;
private final String comment;
}
class Review(val id: UUID, val product: Product, val comment: String)
- Java
- Kotlin
@ParameterizedTest
@AutoSource
void testMethod(@Freeze Product product, Review[] reviews) {
for (Review review : reviews) {
assertSame(product, review.getProduct());
}
}
@ParameterizedTest
@AutoSource
fun testMethod(@Freeze product: Product, reviews: Array<Review>) {
for (review in reviews) {
assertSame(product, review.product)
}
}
That's cool!