TestNG中的运行时问题断言

问题描述 投票:1回答:2

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

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

谢谢

java arrays testng assert
2个回答
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不为空,它将打印列表中的所有值而不是第一个。


0
投票

没有其他漂亮的方法可以做到这一点,因为所有的参数都会立即传递给被调用者,即你的方法,因此必须对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() : ""));
}
© www.soinside.com 2019 - 2024. All rights reserved.