Учебники

9) JUnit ErrorCollector

В обычном сценарии всякий раз, когда вы обнаруживаете какую-либо ошибку во время выполнения теста, вы останавливаете тест, исправляете ошибку и повторно запускаете тест.

Но у JUnit немного другой подход. С помощью сборщика ошибок JUnit вы все равно можете продолжить выполнение теста даже после обнаружения проблемы или сбоя теста. Сборщик ошибок собирает все объекты ошибок и сообщает об этом только один раз после завершения теста.

В этом уроке вы узнаете

Зачем использовать коллектор ошибок?

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

Для этого JUnit использует аннотацию @Rule, которая используется для создания объекта сборщика ошибок. После создания объекта для сборщика ошибок вы можете легко добавить все ошибки в объект с помощью метода addError (Throwable error). Как вы знаете, этот Throwable является суперклассом класса Exception и Error в 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 предоставляет специальный вид обработки тестов, Test Case или набора тестов с помощью аннотации @rule . Используя @rule, вы можете легко добавить или переопределить поведение теста.

Есть несколько встроенных правил, предоставляемых API JUnit, которые может использовать тестер, или даже вы можете написать наше собственное правило.

Ниже приведена строка кода, которая показывает, как использовать аннотацию @rule вместе с Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Пример использования ErrorCollector

Чтобы понять коллектор ошибок, давайте создадим класс и правило для сбора всех ошибок. Вы добавите все ошибки, используя addError (throwable) здесь.

Ниже приведен код, который просто создает правило, которое является ничем иным, как созданием «объекта Collector Error». Который далее используется, чтобы добавить все ошибки, чтобы сообщить о проблеме в конце:

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 ErrorCollector

Вы можете использовать утверждение JUnit для проверки функциональности или графического интерфейса, например

  1. assertEquals (строковое сообщение, ожидаемый объект, фактический объект), которые сравнивают, что два объекта равны.
  2. Точно так же assertTrue (логическое условие) утверждает, что условие истинно.

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

Непрерывность тестирования и обработка восстановления имеют решающее значение для успеха автоматизации тестирования. Сборщик ошибок — лучший способ справиться с такими сценариями.

Резюме :

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