提供未知数量的参数作为 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)));
}
}
我正在为购物车模块进行测试自动化,我正在努力使用 '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)));
}
}