Не останавливайте тест после assertEquals - PullRequest
2 голосов
/ 07 октября 2011

Я пытаюсь отладить неудачный тест с assertEquals тестом JUnit. Я хотел бы увидеть поведение приложения в течение определенного периода времени после сбоя оператора assertEquals. Прямо сейчас, eClipse останавливает тест, как только утверждение не выполнено. Есть ли способ сделать тестовый сон ненадолго после сбоя? Спасибо.

Ответы [ 6 ]

2 голосов
/ 07 октября 2011

Когда вы говорите «поведение приложения в течение определенного периода времени», вы говорите о поведении в другом (не тестовом) потоке, верно?Я извлек бы условия утверждения в переменную, установил точку останова на фактической строке утверждения и запустил тест в отладчике:

@Test
public void testSomeMethod() {
    assertEquals(true, testInstance.someMethod());
}

становится

@Test
public void testSomeMethod() {
    boolean result = testInstance.someMethod();
    /* breakpoint goes here */ assertEquals(true, result);
}
1 голос
/ 08 октября 2011

assertEquals генерирует ошибку AssertionError, поэтому вам нужно найти способ реагировать на это исключение.

У вашей IDE может быть возможность добавить точку останова при возникновении исключения или ошибки. Если это так, то добавьте один для AssertionError.

Если этого не произойдет, вы можете добавить попытку catch вокруг assertEquals и добавить точку останова в блоке catch.

1 голос
/ 07 октября 2011

Не совсем. За кулисами среда JUnit создает исключение, когда утверждение не выполняется. Eclipse ловит это исключение и помечает данный тест как неудачный. Итак, вы спрашиваете: возможно ли подавить выброшенное исключение и продолжить выполнение ?

Юнит тебе здесь не поможет. Вы можете заменить утверждения JUnit своими собственными обертками, которые просто не выдают исключение (или бросают, когда тест завершается). Конечно, вы также можете закомментировать тестовые неудачи. Но нет встроенного решения.

1 голос
/ 07 октября 2011

самое простое, что нужно сделать, это закомментировать строку.

Индивидуальный тест не пройден, как только утверждение не выполнено, причина в том, как вы можете доверять каким-либо результатам после первого сбоя?

Вы сказали

 I'd like to see the behavior of the application for a certain amount of time after the assertEquals statement fails

Я не понимаю это утверждение. Запускаете ли вы приложение с утверждениями junit или набор юнит-тестов? Кроме того, если утверждение не удается, почему вы хотите продолжить? Похоже, что ваш дизайн теста требует дополнительной работы - ошибка подтверждения означает, что ситуация является ошибкой, точка. Если вы хотите увидеть, что происходит после сбоя, вам следует добавить больше подробностей к утверждению и делать сбой только тогда, когда вы не хотите продолжать.

0 голосов
/ 07 октября 2011

В общем, ваши юнит-тесты должны содержать одно утверждение;одну вещь, которую они тестируют.Неразумно иметь два теста, в которых содержится один и тот же код, за исключением утверждения, то есть «Когда это выполнено, эти две вещи должны быть истинными», то есть двумя тестами.

Стоит помнитьчто, если вы действительно ищете дополнительный код (за исключением утверждения), чтобы помочь вам определить, ПОЧЕМУ тест не удался, рассмотрите все более популярную отладку printf.Вы можете добавить некоторые выходные данные в тест до подтверждения, чтобы вы знали, как обстоят дела.Вы всегда можете вытащить его обратно, как только тест заработает.

0 голосов
/ 07 октября 2011

в идеале ваш тест должен иметь только одно утверждение на тесты, и ваш тест должен охватывать только одну конкретную функциональность одновременно.

если у вас более одного теста, вполне может быть так, что другие ваши активы потерпели неудачу из-за первого сбоя, и поэтому нет смысла в проведении других тестов.

Но если вы все еще хотите идти вперед и делать это хорошо, то, возможно, вы можете создать свою собственную библиотеку утверждений, в которой вы создадите свой собственный apis и сохраните результаты где-нибудь, а затем распечатаете ошибку. не слишком близко к Java, поэтому не знаете, как это можно кодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...