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