Подтвердить что ты не робот

Как сделать 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()? Спасибо за любой намек.

4b9b3361

Ответ 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, хотя очевидно, что оно меньше идеала. Тем не менее, это решит проблему, если все остальное не удастся.