gpt4 book ai didi

java - 使用 @MethodSource 和返回 ArrayList 的方法进行参数化 JUnit 测试

转载 作者:行者123 更新时间:2023-12-02 03:46:06 26 4
gpt4 key购买 nike

我想为具有三个输入参数的方法实现参数化 JUnit 测试。我希望测试运行这三个输入参数的所有可能组合的笛卡尔积。为此,我有一个方法,可以生成笛卡尔积并将其存储在 Arraylist 中。如何访问我的测试方法的单个值?我已经阅读过有关返回参数流的内容,但我想生成参数的值而不是显式地写入它们。

@ParameterizedTest
@MethodSource("generateCartesianProduct")
public void myTest(int x, int y, int z) {
Assertions.assertTrue(methodToTest(
x, y, z));
}

private static whatToReturnHere?? generateCartesianProduct() {
int[] x = {1, 2, 3};
int[] y = {4, 5, 6};
int[] z = {7, 8, 9};
ArrayList<Integer> list = new ArrayList<>();
ArrayList<ArrayList> result = new ArrayList<>();

for (int i = 0; i < x.length; i++) {
for (int j = 0; j < y.length; j++) {
for (int k = 0; k < z.length; k++) {
list = new ArrayList<>();
list.add(x[i]);
list.add(y[j]);
list.add(z[k]);
result.add(list);
}
}
}
return result;
}

最佳答案

尝试以下操作并返回org.junit.jupiter.params.provider.Arguments(如@MethodSource的javadoc建议。

@ParameterizedTest
@MethodSource("generateCartesianProduct")
public void myTest(final int x, final int y, final int z) {
System.out.println(x + " " + y + " " + z);
}

private static List<Arguments> generateCartesianProduct() {
final int[] x = { 1, 2, 3 };
final int[] y = { 4, 5, 6 };
final int[] z = { 7, 8, 9 };
final List<Integer> list = new ArrayList<>();
final List<Arguments> result = new ArrayList<>();

for (final int element : x) {
for (final int element2 : y) {
for (final int element3 : z) {
final Object[] values = { element, element2, element3 };
result.add(() -> values);
}
}
}
return result;
}

编辑:正如您所知,有一个 Guava 函数可以生成笛卡尔积:Lists.cartesianProduct

关于java - 使用 @MethodSource 和返回 ArrayList 的方法进行参数化 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56806983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com