Проблемы во время выполнения в TestNG утверждает - PullRequest
1 голос
/ 05 марта 2019

У меня есть утверждение 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 ]

1 голос
/ 07 марта 2019

Ниже должно работать:

import static org.testng.Assert.assertEquals;


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

Это также более практично, потому что если список не пуст, он напечатает все значения из списка вместо первого.

0 голосов
/ 05 марта 2019

Нет другого симпатичного способа сделать это, поскольку все ваши аргументы передаются вызываемому, то есть вашему методу, так что 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() : ""));
}
...