动态数组pop方法正在运行但JUnit中出错

问题描述 投票:0回答:2

我在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方法正在运行。所以我无法理解为什么我仍然收到错误。

java junit dynamic-arrays pop
2个回答
1
投票

断言

assertEquals(i, a.pop())

从来没有true因为a.pop()将数组大小减少了一个。因此断言

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

true


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.