我在java中实现了一个动态数组。我的pop方法应该将数组复制到一个新数组中,少一个项目。该方法有效但是我在使用assert进行测试时收到错误。
这是pop方法:
public int pop() {
data = Arrays.copyOf(data, data.length-1);
return data.length;
}
这是JUnit测试:
@Test
public void testLargePop() {
DynamicArray a = new DynamicArray(10);
for (int i = 1; i <= 100; i++) {
a.push(i);
}
for (int i = 100; i >= 1; i--) {
assertEquals(i, a.length());
assertEquals(i, a.pop());
assertEquals("pop should reduce the length of a dynamic array by 1", i-1, a.length());
}
}
这是失败追踪:
java.lang.AssertionError:expected:<100>但是:<99>
失败就在这条线上:
assertEquals(i, a.pop());
失败是说预期100但是99,但是pop应该将长度减少到99.这意味着pop方法正在运行。所以我无法理解为什么我仍然收到错误。
断言
assertEquals(i, a.pop())
从来没有true
因为a.pop()
将数组大小减少了一个。因此断言
assertEquals(i - 1, a.pop())
是true
。
在第一个循环中,迭代器i等于100.这使得inital 100个项目在第一个断言中匹配。下一个断言仍然将迭代器值100与现在较短的数组的长度进行比较。 100!= 99。