猿问

TestNG 断言中的运行时问题

我有一个 TestNG 断言,由于断言的对象(ArrayList 元素)的状态,它可能偶尔会失败,当它发生时,我想显示这个状态。


我创建了一个将在运行时失败的示例,以说明这个概念


import static org.testng.Assert.assertEquals;




@Test

public void sandbox() {

    ArrayList<Integer> arr = new ArrayList<>();

    assertEquals(arr.size(), 0, "The problem is: " + arr.get(0).toString());

}

当我删除第三个参数(消息)时,我希望断言会通过并且它会通过。我认为这不是 TestNG 问题,因为执行不是单步执行语句,而是在这一步直接失败


at java.util.ArrayList.rangeCheck(ArrayList.java:657)

at java.util.ArrayList.get(ArrayList.java:433)

这里最好的方法是什么?我正在考虑一种处理异常的方法,但也许有更好的方法。


守着一只汪
浏览 97回答 2
2回答

吃鸡游戏

下面应该工作:import static org.testng.Assert.assertEquals;@Testpublic void sandbox() {&nbsp; &nbsp; ArrayList<Integer> arr = new ArrayList<>();&nbsp; &nbsp; assertEquals(arr.size(), 0, "The problem is: " + arr);}这也更实用,因为如果列表不为空,它将打印列表中的所有值而不是第一个值。

凤凰求蛊

没有其他漂亮的方法可以做到这一点,因为您的所有参数都立即传递给被调用者,即您的方法,因此arr.get(0)必须已评估。next()仅当有一个元素使用Iterator您的集合时,您才可以简单地调用该元素:@Testpublic void sandbox() {&nbsp; &nbsp; ArrayList<Integer> arr = new ArrayList<>();&nbsp; &nbsp; Iterator<Integer> it = arr.iterator();&nbsp; &nbsp; assertEquals(arr.size(), 0, "The problem is: " + (it.hasNext() ? iterator.next() : ""));}
随时随地看视频慕课网APP

相关分类

Java
我要回答