TestNG中的运行时问题断言

时间:2019-03-05 11:38:11

标签: java arrays testng assert

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

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

谢谢

2 个答案:

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