Java8-JUnit5使用assert时出现ArrayList相关异常,是否使用正确?
问题解答
那个ArrayList是测试框架的内部实现,和你的代码无关
你看到的ArrayList.forEach栈帧来自测试框架(比如JUnit)的内部执行逻辑,并非你的代码引入的。
具体原因
测试框架会把所有待执行的测试方法封装成任务,存储在ArrayList这类集合中,再通过forEach遍历执行这些任务。当你的测试方法抛出AssertionError时,异常的栈追踪会完整记录从框架入口到你的代码的调用链路,因此会出现框架内部的ArrayList调用栈。
你的assert使用是正确的
你的断言语法完全符合Java规范:
public class ThisTest { @Test public void myTest () { assert 1==2 : "nope"; } }
触发AssertionError是预期结果,说明你已经通过VM参数-ea(启用断言)开启了断言功能(Java默认关闭断言)。
无需在意这个栈帧
这个ArrayList的调用栈属于框架内部逻辑,对你的代码没有任何影响,排查问题时只需关注你自己代码的栈帧(com.blah.ThisTest.myTest(ThisTest.java:8))即可。
内容的提问来源于stack exchange,提问作者DraxDomax
相关产品推荐
相关产品推荐

