提供未知数量的参数作为 JUnit CsvSource

Providing unknown number of parameters as JUnit CsvSource

我正在为购物车模块进行测试自动化,我正在努力使用 'nice way' 中的 JUnit @CsvSource 提供测试数据。

到目前为止我的测试是这样的

@ParameterizedTest(name = "Total quantity and price in the cart is calculated correctly for various type items")
@CsvSource({
        "Ball, 3, Glasses, 5, Cable, 15, Monitor, 25, Cube, 11",
        "Camera, 10, Ball, 33, Pillow, 1, Notebook, 19, Headphones, 2"
})
void quantityAndPriceIsCorrectForDifferentTypesOfProducts(String name1, String amount1,
                                                          String name2, String amount2,
                                                          String name3, String amount3,
                                                          String name4, String amount4,
                                                          String name5, String amount5) {
    task1Page = new Task1Page(driver);
    task1Page.open();

    List<String> names = List.of(name1, name2, name3, name4, name5);
    List<String> amounts = List.of(amount1, amount2, amount3, amount4, amount5);

    task1Page.addItemsToBasketFromTheList(names, amounts);
    task1Page.verifyQuantityOfItemsInBasketFromList(names, amounts);
    task1Page.verifyTotalPriceInBasketFromList(names, amounts);
    ...
}

在我当前的实施中,我仅限于 5 种项目类型。我还想包括更多产品的案例。有什么好的方法可以处理这种情况吗?

您可能希望使用 @MethodSource 构建更复杂的测试数据:

import static java.util.Arrays.asList;

import java.util.List;
import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

public class MoreTestDataTest {

    @ParameterizedTest
    @MethodSource("data")
    public void test(List<String> products, List<String> amounts) {

        // ...

    }

    private static Stream<Arguments> data() {
        return Stream.of(
                Arguments.of(asList("a", "b", "c", "d", "e", "f"), asList(1, 2, 3, 4, 5, 6)),
                Arguments.of(asList("x", "y", "z"), asList(7, 8, 9)));
    }
}