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());							
   }		
}      

вихід:

Перегляньте трасування помилок, яке відстежує всі помилки в одному місці:

TestRunner.Java Вихід

Переваги JUnit ErrorCollector

Ви можете використовувати JUnit твердження для перевірки функціональності або GUI, наприклад

  1. assertEquals(повідомлення рядка, очікуваний об’єкт, фактичний об’єкт), які порівнюють, що два об’єкти є рівними.
  2. Подібним чином assertTrue(булева умова) підтверджує, що умова є істинною.

Використовуючи твердження, перевірка перевірки стає легкою. Але одна головна проблема полягає в тому, що виконання тесту припиниться, навіть якщо одне твердження виявиться невдалим.

Безперервність тестування та керування відновленням мають вирішальне значення для успіху автоматизації тестування. Error Collector — найкращий спосіб вирішення подібних ситуацій.

Підсумки

  • Колектор помилок Junit дозволяє продовжувати тест навіть після того, як знайдено першу проблему, а в кінці тест не вдається
  • Збирач помилок збирає всі об’єкти помилок і повідомляє про них лише після завершення виконання тесту
  • Перевага додавання всіх помилок у збірник помилок полягає в тому, що ви можете перевірити всі помилки одночасно
  • Збирач помилок просто додає помилки за допомогою методу addError(throwable err), наданого ErrorCollector.java.