TestNG 断言中的运行时问题

Runtime problems in TestNG asserts

我有一个 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)

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

谢谢

没有其他 pretty 方法可以做到这一点,因为您的所有参数都会立即传递给被调用方,即您的方法,因此 arr.get(0) 必须具有已评价

只有当有人使用 Iterator 而不是 collection 时,您才可以调用 next() 元素:

@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() : ""));
}

下面应该有效:

import static org.testng.Assert.assertEquals;


@Test
public void sandbox() {
    ArrayList<Integer> arr = new ArrayList<>();
    assertEquals(arr.size(), 0, "The problem is: " + arr);
}

这也更实用,因为如果列表不为空,它将打印列表中的所有值而不是第一个值。