我有一个 TestNG 断言,由于断言的对象(ArrayList 元素)的状态,它可能偶尔会失败,当它发生时,我想显示这个状态。我创建了一个将在运行时失败的示例,以说明这个概念import static org.testng.Assert.assertEquals;@Testpublic 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)这里最好的方法是什么?我正在考虑一种处理异常的方法,但也许有更好的方法。
2 回答
吃鸡游戏
TA贡献1829条经验 获得超7个赞
下面应该工作:
import static org.testng.Assert.assertEquals;
@Test
public void sandbox() {
ArrayList<Integer> arr = new ArrayList<>();
assertEquals(arr.size(), 0, "The problem is: " + arr);
}
这也更实用,因为如果列表不为空,它将打印列表中的所有值而不是第一个值。
凤凰求蛊
TA贡献1825条经验 获得超4个赞
没有其他漂亮的方法可以做到这一点,因为您的所有参数都立即传递给被调用者,即您的方法,因此arr.get(0)必须已评估。
next()仅当有一个元素使用Iterator您的集合时,您才可以简单地调用该元素:
@Test
public void sandbox() {
ArrayList<Integer> arr = new ArrayList<>();
Iterator<Integer> it = arr.iterator();
assertEquals(arr.size(), 0, "The problem is: " + (it.hasNext() ? iterator.next() : ""));
}
添加回答
举报
0/150
提交
取消