我开始使用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的方法结束。然后运行它,并将代码中的行与堆栈跟踪进行比较。一切都会明朗起来。