JUnit ErrorCollector @Rule із прикладом
⚡ Розумний підсумок
JUnit ErrorCollector – це правило, яке дозволяє тесту продовжувати роботу після невдачі, збираючи кожен об'єкт помилки та повідомляючи про них разом після завершення методу тестування, а не зупиняючи його.ping при першій проблемі.
У звичайному сценарії, коли ви виявляєте будь-яку помилку під час виконання тесту, ви зупиняєте тест, виправляєте помилку та повторно запускаєте тест.
Можливості JUnit має дещо інший підхід. З JUnit Колектор помилок, ви можете продовжувати виконання тесту навіть після виявлення проблеми або невдалого проходження тесту. Колектор помилок збирає всі об'єкти помилок і повідомляє про них лише один раз, після завершення виконання тесту.
Навіщо використовувати Error Collector?
Під час написання тестового скрипта потрібно виконати всі тести, навіть якщо будь-який рядок коду завершиться невдачею через збій мережі, невдачу твердження або з будь-якої іншої причини. У такому випадку ви все ще можете продовжувати виконання тестового скрипта, використовуючи спеціальну функцію, що надається JUnit відомий як «колектор помилок».
Для цього, JUnit використовує Анотація @Rule, який використовується для створення об'єкта збирача помилок. Після створення об'єкта для збирача помилок ви можете легко додати всі помилки до об'єкта за допомогою методу addError (можлива помилка)Як ви знаєте, Кидальний є суперкласом Виняток та помилка заняття в JavaКоли ви додаєте помилки таким чином, ці помилки будуть записані в журнал JUnit результат тесту.
Перевага додавання всіх помилок до колекціонера помилок полягає в тому, що ви можете перевірити всі помилки одночасно. Крім того, якщо скрипт завершується невдачею посеред виконання, виконання все одно продовжується до кінця методу тестування.
Примітка:У випадку використання простого твердження або блоку try/catch, використання методу збирання помилок буде неможливим.
Зразок коду
Щоб дізнатися більше про Колектор помилок, дивіться приклад коду нижче, який демонструє, як створити об'єкт Колектор помилок та додати всі помилки до цього об'єкта до tracпитання:
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. } }
Примітка: це ілюстративний прикладtract, не компільований файл. Його кінцевий коментар переноситься на другий рядок без початкового //, а getResults() та зіставники Hamcrest не відображаються. Повна версія, яку можна виконати, наведена нижче. Приклад використання ErrorCollector.
Що таке @Rule? JUnit?
JUnit забезпечує спеціальний вид обробки тестів, Тестовий випадок або набір тестів за допомогою Анотація @RuleВикористовуючи @Rule, ви можете легко додати або перевизначити поведінку тесту.
Існує кілька вбудованих правил, передбачених JUnit API, який може використовувати тестер, а також ви можете написати власне правило. Поле правила має бути публічним, нестатичним та такого типу, що реалізує TestRule.
Дивіться рядок коду нижче, який показує, як використовувати анотацію @Rule разом зі збирачем помилок:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit Примітка за 5 рік: Юпітер замінив правила API розширення, тому @Rule та ErrorCollector не існують в org.junit.jupiter. Найближчими еквівалентами є Assertions.assertAll() та AssertJ SoftAssertions. JUnit 4 код, показаний тут, все ще працює через вінтажний двигун. Дивіться JUnit анотації посібник для повної картиping.
Приклад використання 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()); } }
вихід:
Дивіться на невдачу tracе, який tracвсі помилки в одному місці. JUnit view зараховує один запуск, але повідомляє про дві помилки та одну невдачу, кожна з яких має свій власний номер рядка:
Переваги JUnit ErrorCollector
Можна використовувати a JUnit затвердження для функціональної або графічної перевірки, наприклад:
- assertEquals(String message, Object expected, Object actual), що порівнює, чи є два об'єкти рівними.
- Подібним чином assertTrue(булева умова) підтверджує, що умова є істинною.
Використання тверджень спрощує валідаційне тестування. Але одна з головних проблем полягає в тому, що виконання тесту зупиниться, навіть якщо одне твердження завершиться невдачею.
Безперервність тестування та обробка відновлення мають вирішальне значення для успіху автоматизації тестування, і це найбільше значення має в довгостроковій перспективі. Selenium потоки, де перезапуск браузера після кожної невдалої перевірки є дорогим. Збірник помилок – найкращий спосіб обробки таких сценаріїв.

