JUnit ErrorCollector @Rule с примером
В обычном сценарии, когда вы обнаруживаете какую-либо ошибку во время выполнения теста, вы должны остановить тест, исправить ошибку и перезапустить тест.
Но JUnit имеет немного другой подход. С JUnit сборщик ошибок, вы все равно можете продолжить выполнение теста даже после того, как обнаружена проблема или тест не пройден. Сборщик ошибок собирает все объекты ошибок и сообщает об этом только один раз после завершения выполнения теста.
Зачем использовать сборщик ошибок?
При написании тестового сценария вы хотите выполнить все тесты, даже если какая-либо строка кода завершится сбоем из-за сбоя сети, сбоя утверждения или по какой-либо другой причине. В этой ситуации вы все равно можете продолжить выполнение тестового сценария, используя специальную функцию, предоставляемую JUnit известный как «сборщик ошибок».
Для этого, JUnit использования @Rule аннотация который используется для создания объекта сборщика ошибок. После создания объекта для сборщика ошибок вы можете легко добавить в него все ошибки, используя метод addError (Выбрасываемая ошибка). Как вы знаете, это Метательный это супер класс Исключение и Ошибка класс в Java. Когда вы добавляете ошибки таким образом, эти ошибки будут регистрироваться в системе. JUnit результат испытаний .
Преимущество добавления всех ошибок в сборщик ошибок состоит в том, что вы можете проверить все ошибки одновременно. Кроме того, если сценарий завершается сбоем в середине, он все равно может продолжить его выполнение.
Внимание: В случае использования простого блока Assert или Try/Catch использование метода сборщика ошибок будет невозможно.
Образец кода
Чтобы узнать больше о сборщике ошибок, см. пример кода ниже, который демонстрирует, как создать объект сборщика ошибок и добавить все ошибки в этот объект для отслеживания проблемы:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
Что такое @Rule в jUnit?
JUnit обеспечивает особый вид обработки тестов, Тестовый кейс или набор тестов, используя аннотация @rule. Используя @rule, вы можете легко добавить или переопределить поведение теста.
Существует несколько встроенных правил, предоставляемых JUnit API, который может использовать тестер, или даже вы можете написать собственное правило.
См. строку кода ниже, которая показывает, как использовать аннотацию @rule вместе со сборщиком ошибок:
@Rule public ErrorCollector collector= new ErrorCollector();
Пример использования ErrorCollector
Чтобы понять сборщик ошибок, давайте создадим класс и правило для сбора всех ошибок. Вы добавите сюда все ошибки, используя addError(throwable).
См. код ниже, который просто создает правило, которое представляет собой не что иное, как создание «объекта сборщика ошибок». Что далее используется для добавления всех ошибок, чтобы в конце сообщить о проблеме:
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
TestRunner.java
Давайте добавим вышеуказанный тестовый класс в программу запуска тестов и выполним его, чтобы собрать все ошибки. См. код ниже:
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Вывод:
Посмотрите трассировку ошибок, которая отслеживает все ошибки в одном месте:
Преимущества JUnit Сборщик ошибок
Вы можете использовать JUnit утверждение для функциональной проверки или проверки графического интерфейса, например
- AssertEquals (Строковое сообщение, Ожидаемый объект, Фактический объект), которые сравнивают, что два объекта равны.
- Аналогичным образом, AssertTrue(Boolean Condition) утверждает, что условие истинно.
Используя утверждение, проверочный тест становится простым. Но одна из основных проблем заключается в том, что выполнение теста остановится, даже если одно утверждение окажется неудачным.
Непрерывность тестирования и обработка восстановления имеют решающее значение для успеха автоматизации тестирования. Сборщик ошибок — лучший способ справиться с такими сценариями.
Итого
- Сборщик ошибок Junit позволяет продолжить тест даже после обнаружения первой проблемы и в конце тест завершается неудачно.
- Сборщик ошибок собирает все объекты ошибок и сообщает только об этом, ведь выполнение теста окончено.
- Преимущество добавления всех ошибок в сборщик ошибок заключается в том, что вы можете проверить все ошибки одновременно.
- Сборщик ошибок просто добавляет ошибки, используя метод addError(throwable err), предоставленный ErrorCollector.java.