Предоставление неизвестного количества параметров в качестве JUnit CsvSource - PullRequest
1 голос
/ 17 октября 2019

Я работаю над автоматизацией тестирования для модуля корзины покупок и изо всех сил пытаюсь предоставить тестовые данные с использованием 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 типами элементов. И я хотел бы также включить случаи с большим количеством продуктов. Есть ли хороший способ справиться с этим делом?

1 Ответ

1 голос
/ 18 октября 2019

Возможно, вы захотите построить более сложные тестовые данные с помощью @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)));
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...