我有一个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)
这里最好的方法是什么?我正在考虑一种可以处理异常的方法,但是也许有更好的已知方法。
谢谢
答案 0 :(得分:1)
下面应该可以工作:
import static org.testng.Assert.assertEquals;
@Test
public void sandbox() {
ArrayList<Integer> arr = new ArrayList<>();
assertEquals(arr.size(), 0, "The problem is: " + arr);
}
这也更加实用,因为如果list不为空,它将打印列表中的所有值,而不是第一个。
答案 1 :(得分:0)
没有其他 pretty 方法,因为所有参数都立即传递给被调用者(即您的方法),因此必须对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() : ""));
}