JUnit ErrorCollector @Rule із прикладом
У звичайному сценарії, коли ви виявляєте будь-яку помилку під час виконання тесту, ви зупиняєте тест, виправляєте помилку та повторно запускаєте тест.
Можливості JUnit має дещо інший підхід. с JUnit збирача помилок, ви все ще можете продовжувати виконання тесту навіть після того, як виявлено проблему або тест не вдається. Колектор помилок збирає всі об'єкти помилок і повідомляє про це лише один раз після завершення виконання тесту.
Навіщо використовувати Error Collector?
Під час написання тестового сценарію ви бажаєте виконати всі тести, навіть якщо будь-який рядок коду зазнає невдачі через збій мережі, збій підтвердження або з будь-якої іншої причини. У цій ситуації ви можете продовжити виконання тестового сценарію за допомогою спеціальної функції, наданої JUnit відомий як «колектор помилок».
Для цього, JUnit використовує Анотація @Rule який використовується для створення об’єкта збирача помилок. Після створення об’єкта для збирача помилок ви можете легко додати всі помилки в об’єкт за допомогою методу addError (можлива помилка). Як відомо, що Кидальний є супер класом Виняток та помилка клас в Java. Коли ви додаєте помилки таким чином, ці помилки будуть зареєстровані JUnit результати тесту .
Перевага додавання всіх помилок у збірник помилок полягає в тому, що ви можете перевірити всі помилки одночасно. Крім того, якщо сценарій дає збій посередині, він все одно може продовжити його виконання
Примітка:: у разі використання простого блоку assert або try/catch використання методу збору помилок буде неможливим.
Зразок коду
Щоб дізнатися більше про Error Collector, перегляньте наведений нижче приклад коду, який демонструє, як створити об’єкт Error Collector і додати всі помилки в цей об’єкт для відстеження проблеми:
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 разом із Error Collector:
@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 ErrorCollector
Ви можете використовувати JUnit твердження для перевірки функціональності або GUI, наприклад
- assertEquals(повідомлення рядка, очікуваний об’єкт, фактичний об’єкт), які порівнюють, що два об’єкти є рівними.
- Подібним чином assertTrue(булева умова) підтверджує, що умова є істинною.
Використовуючи твердження, перевірка перевірки стає легкою. Але одна головна проблема полягає в тому, що виконання тесту припиниться, навіть якщо одне твердження виявиться невдалим.
Безперервність тестування та керування відновленням мають вирішальне значення для успіху автоматизації тестування. Error Collector — найкращий спосіб вирішення подібних ситуацій.
Підсумки
- Колектор помилок Junit дозволяє продовжувати тест навіть після того, як знайдено першу проблему, а в кінці тест не вдається
- Збирач помилок збирає всі об’єкти помилок і повідомляє про них лише після завершення виконання тесту
- Перевага додавання всіх помилок у збірник помилок полягає в тому, що ви можете перевірити всі помилки одночасно
- Збирач помилок просто додає помилки за допомогою методу addError(throwable err), наданого ErrorCollector.java.