Как сделать JUnit для печати утверждений и результатов
У меня есть несколько таких тестов:
@Test
public void test01()
{
Position p = getPositionAt('a', 1);
assertNotNull("a1 exists", p);
assertNotNull("figure exists a1", p.getFigure());
p = getPositionAt('a', 2);
assertNotNull("exists a2", p);
assertNull("figure exists a2", p.getFigure());
p = getPositionAt('b', 1);
assertNotNull("exists b1", p);
assertNull("figure exists b1", p.getFigure());
}
Во время выполнения тестов мне нужно распечатать каждое сообщение assert в stdout, а затем результат assert.
Для этого требуется формат из тестового класса:
a1 exists -success
figure exists a1 -success
exists a2 -success
figure exists a2 -succcess
exists b1 -succcess
figure exists b1 -failed
Но как это сделать? Я совсем недавно работаю с JUnit и понятия не имею. Есть ли способ использовать runners
и suites
? Или существуют какие-либо методы assertSuccess()
, assertFailed()
? Спасибо за любой намек.
Ответы
Ответ 1
Во-первых, у вас есть две проблемы, а не одна. Когда утверждение терпит неудачу, генерируется исключение AssertionError
. Это предотвращает проверку любого утверждения, прошедшего после этого. Чтобы решить эту проблему, вам необходимо использовать ErrorCollector.
Во-вторых, я не верю, что в JUnit есть какой-то способ сделать это. Однако вы можете реализовать свои собственные методы, которые завершают утверждения:
public static void assertNotNull(String description, Object object){
try{
assertNotNull(description, object);
System.out.println(description + " - passed");
}catch(AssertionError e){
System.out.println(description + " - failed");
throw e;
}
}
Ответ 2
Все методы assertXXX имеют форму, которая позволяет отображать String при ошибке:
assertNotNull("exists a2", p); // prints "exists a2" if p is null
Нет особого значения при печати сообщения об успешном завершении.
ИЗМЕНИТЬ
Junit обычно предоставляет 2 формы утверждения. Чтобы следовать приведенному выше примеру, вы можете проверить нулевое значение одним из двух способов:
assertNotNull(p)
или
assertNotNull("my message on failure", p)
Структура будет печатать сообщения об ошибках без каких-либо других усилий, требуемых вами (это предусмотрено каркасом).
Чтобы проверить исключения, вы должны использовать следующий шаблон:
try{
someCall();
catch(Exception e){
fail(): // exception shouldn't happen, use assertTrue(true) if it should
}
Опять же, существуют версии этих методов для добавления сообщения
Проверьте API
Ответ 3
Последняя опция - это связать каждое утверждение с соответствующим System.out.println
, хотя очевидно, что оно меньше идеала. Тем не менее, это решит проблему, если все остальное не удастся.