Java8-JUnit5:为什么断言会引发关于ArrayList的一些异常(我是否正确使用了它)



我开始使用assert关键字,而不是编写条件异常raise。我不确定我是否正确使用了assert,因为当测试失败时,异常会谈论一些ArrayList(我在这里没有使用它(。

以下是一些重现错误的代码:

public class ThisTest {
@Test
public void myTest () {
assert 1==2 : "nope";
}
}

因此,正如预期的那样,我得到了我的断言错误,但最后也有这样的东西(向您展示了整个输出(:

java.lang.AssertionError: nope
at com.blah.ThisTest.myTest(ThisTest.java:8)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

这是在说什么ArrayList,也许我缺少了一个参数?

异常之后的行被称为"堆栈跟踪"。最上面一行是异常发生的位置。下一行是调用包含顶行的方法的位置。对于堆栈跟踪的其余行也是如此。

大多数时间错误是由传入的值引起的。因此,要解决这个问题,必须遍历堆栈跟踪,在每一行确定如何创建不正确的参数。

换句话说,JUnit调用了ArrayList上的forEach方法,从而导致对程序的调用。

在您的情况下,堆栈跟踪没有帮助,因为它在库中。当堆栈跟踪指向您自己代码中的位置时,它们会更有帮助。

如果您想亲自编写一些简单的类,并让它们相互调用,以一个只抛出RuntimeException的方法结束。然后运行它,并将代码中的行与堆栈跟踪进行比较。一切都会明朗起来。

最新更新