我最近开始学习Java(我是.net的家伙),我对以下单元测试有问题:
@Test(dataProvider = "rotatedArray")
public void given_array_of_items_rotates_array(Integer[] originalArray, int rotationCount, Integer[] expectedArray) {
originalArray = originalArray.clone();
Utils.rotate(originalArray, rotationCount);
Assert.assertArrayEquals(expectedArray, originalArray);
}
@DataProvider(name = "rotatedArray")
public static Object[][] rotatedArrayProvider() {
return new Object[][] {
// array that is not rotated
{
new Integer[] { 1, 2, 3, 4, 5, 6 },
0,
new Integer[] { 1, 2, 3, 4, 5, 6 }
},
// array rotated one place forward
{
new Integer[] { 1, 2, 3, 4, 5, 6 },
1,
new Integer[] { 6, 1, 2, 3, 4, 5 }
},
// array rotated one place backward
{
new Integer[] { 1, 2, 3, 4, 5, 6 },
-1,
new Integer[] { 2, 3, 4, 5, 6, 1 }
},
// array rotated by array.length
{
new Integer[] { 1, 2, 3, 4, 5, 6 },
6,
new Integer[] { 1, 2, 3, 4, 5, 6 }
},
// array rotated by array.length - 1
{
new Integer[] { 1, 2, 3, 4, 5, 6 },
5,
new Integer[] { 2, 3, 4, 5, 6, 1 }
},
// array rotated by some number of places backwards
{
new Integer[] { 1, 2, 3, 4, 5, 6 },
-3,
new Integer[] { 4, 5, 6, 1, 2, 3 }
},
};
}
Utils.rotate
是一个简单的函数,它旋转作为参数传递的数组给定的位置数。当我在IntelliJ中使用注释行运行此代码时:
// originalArray = originalArray.clone();
两个given_array_of_items_rotates_array
测试用例在没有任何有意义的消息的情况下失败。当我取消注释克隆数组的行或者减少数据提供程序中的测试用例数时问题就消失了。此测试只是使用rotatedArray
提供程序的测试。看起来问题在于修改输入参数 - 我搜索了TestNG文档,但我找不到任何线索。
编辑: 将测试方法改为:
@Test(dataProvider = "rotatedArray")
public void given_array_of_items_rotates_array(Integer[] originalArray, int rotationCount, Integer[] expectedArray) {
for (int i = 0; i < originalArray.length; i++)
originalArray[i] = 123;
}
某些测试仍未通过。控制台中没有输出。
看起来修改参数比使用断言更有问题。
答案 0 :(得分:0)
目前,TestNG(6.9.9)可能在数组断言方面存在一些问题。它应该在下一个版本中修复。 见https://github.com/cbeust/testng/pull/870