Java 动态数组pop方法正在工作,但JUnit中出现错误

Java 动态数组pop方法正在工作,但JUnit中出现错误,java,junit,dynamic-arrays,Java,Junit,Dynamic Arrays,我正在用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 DynamicA

我正在用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());
    }
}
失败是说预期100,但是99,然而流行音乐应该减少长度为99。这意味着pop方法正在发挥作用。所以我不明白为什么我仍然收到错误

断言

assertEquals(i, a.pop())
assertEquals(i - 1, a.pop())
从不为
true
,因为
a.pop()
会将数组大小减小一。因此,断言

assertEquals(i, a.pop())
assertEquals(i - 1, a.pop())

在第一个循环中,迭代器i等于100。这使得初始100项在第一个断言中匹配。下一个断言仍然将迭代器值100与现在更短的数组的长度进行比较。100 != 99