我有一组选项池,我正在尝试动态生成组合以进行测试。我想定义存储桶并让代码生成所有组合以通过@DataProvider 提供给我的 TestNG 测试。现在我有一些硬编码的案例,但很明显这不是维护代码的最佳方式。
我正在努力处理当 y > 2 时您在 y 个“桶”中有 x 个“球”的情况。
在微不足道的情况下,假设您有以下示例:
public static void main(String [] args){
Object[][] combinations = getCombinations(
new String[]
{
"1", "2"
},
new String[]
{
"3", "4"
}/*,
new String[]
{
"5", "6"
}*/);
for (Object[] combination : combinations)
{
System.out.println(Arrays.toString(combination));
}
}
private Object[][] getCombinations(Object[]... arrays)
{
if (arrays.length == 0)
{
return new Object[0][0];
}
List<Object[]> solutions = new ArrayList<>();
Object[] array1 = arrays[0];
for (Object o : array1)
{
for (int i = 1; i < arrays.length; i++)
{
for (Object o2 : arrays[i])
{
int count = 0;
Object[] path = new Object[arrays.length];
path[count++] = o;
path[count++] = o2;
solutions.add(path);
}
}
}
return solutions.toArray(new Object[0][0]);
}
输出:
[1, 3]
[1, 4]
[2, 3]
[2, 4]
添加第三个“桶”会将所有东西都扔出窗外。
解决方法如下:
[1,3,5]
[1,3,6]
[1,4,5]
[1,4,6]
[2,3,5]
[2,3,6]
[2,4,5]
[2,4,6]
任何想法如何解决这个问题?理想情况下,您会通过 getCombinations 每个桶的选择数量。
虽然欢迎提供解决方案代码,但我对它背后的推理更感兴趣。
不负相思意
HUWWW
相关分类