JUnit ErrorCollector @Rule с примером

⚡ Умное резюме

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

  • 🔘 Цель: Продолжите тестирование после сбоя проверки утверждения, сети или графического интерфейса пользователя, а затем сообщите обо всех собранных ошибках одновременно.
  • ☑️ Декларация: Условие `@Rule` для публичного нестатического поля `ErrorCollector` указывает... JUnit Прикрепить это правило к каждому тесту.
  • ✅ Сбор: Метод addError(Throwable) сохраняет любые ошибки или исключения, поскольку Throwable является родительским элементом для обоих типов исключений.
  • 🧪 Проверка: Функция checkThat() оценивает совпадение и регистрирует несоответствие, не прерывая выполнение остальных операторов.
  • 🇧🇷 Отчетность: Провал tracВ списке каждого собранного метательного предмета указан его собственный номер. JUnit Посмотреть.
  • 📌 JUnit 5: В Jupiter отсутствуют правила, поэтому функции assertAll() или AssertJ SoftAssertions выполняют ту же роль.

JUnit Правило ErrorCollector, собирающее несколько ошибок в одном тестовом запуске.

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

Созданием цифровых двойников возможности JUnit имеет несколько иной подход. С JUnit Сборщик ошибок позволяет продолжить выполнение теста даже после обнаружения проблемы или сбоя теста. Он собирает все объекты ошибок и сообщает о них только один раз, после завершения выполнения теста.

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

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

Для этого, JUnit использует @Rule аннотацияЭтот метод используется для создания объекта сборщика ошибок. После создания объекта сборщика ошибок вы можете легко добавить все ошибки в этот объект, используя соответствующий метод. addError (Выбрасываемая ошибка). Как ты знаешь, Метательный является суперклассом Исключение и Ошибка классы в JavaПри добавлении ошибок таким способом они будут регистрироваться в журнале. JUnit результат испытаний.

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

ВниманиеВ случае использования простого утверждения (assert) или блока try/catch, применение метода сбора ошибок будет невозможно.

Образец кода

Чтобы лучше понять работу Error Collector, ознакомьтесь с приведенным ниже примером кода, демонстрирующим, как создать объект Error Collector и добавить в него все ошибки. 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 года: Jupiter заменил правила на 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 Система подсчитывает один запуск, но сообщает о двух ошибках и одном сбое, каждый из которых имеет свой номер строки:

Eclipse JUnit недостаточность trace показывает две ошибки Throwable и одну ошибку AssertionError, собранные за один запуск.

Преимущества JUnit Сборщик ошибок

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

  1. assertEquals(String message, Object expected, Object actual) — это проверка на равенство двух объектов.
  2. Аналогичным образом, AssertTrue(Boolean Condition) утверждает, что условие истинно.

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

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

Часто задаваемые вопросы (FAQ)

Функция addError(Throwable) записывает ошибку, которую вы уже перехватили или создали. Функция checkThat(value, matcher) оценивает объект Hamcrest matcher и автоматически записывает несоответствие, поэтому она читается как утверждение, но при этом позволяет выполнить остальные операторы.

Да. Затем метод выполняется до конца. JUnit отмечает неудачу и распечатывает все собранные отходы, подлежащие выбрасыванию в результате неудачи. trace. На скриншоте в качестве примера показаны две ошибки и один сбой, выявленные одним и тем же методом тестирования.

JUnit Этот скрипт сканирует тестовый класс на наличие открытых полей экземпляра, аннотированных @Rule, и применяет каждую из них ко всем тестовым методам. Приватные или статические поля игнорируются. JUnit Вместо выполнения теста возникает ошибка инициализации.

Нет. Jupiter отказался от механизма правил, поэтому org.junit.rules.ErrorCollector существует только в JUnit 4. Используйте Assertions.assertAll() для группированных утверждений или добавьте AssertJ SoftAssertions, если требуются более сложные средства сопоставления.

Да, и это распространенный подход. Страницу с несколькими полями можно проверить за один проход, собирая все несоответствия вместо того, чтобы прерывать проверку на первом из них, что позволяет избежать перезапуска сессии браузера при обнаружении каждой ошибки.

Оба метода откладывают отправку отчетов, но SoftAssert требует явного вызова assertAll() в конце теста, в то время как ErrorCollector сообщает об ошибке автоматически, когда метод возвращает значение. Забыть вызвать assertAll() в TestNG Незаметно скрывает неудачи.

Группа ИИ-помощников потерпела неудачу много лет назад. tracПо первопричине, двадцать собранных проблемных случаев сводятся к нескольким отдельным дефектам. Они также подсказывают, какие проверки следует проводить вместе в одном собранном цикле, а не в отдельных тестах.

Второй пилот GitHub Поле `@Rule` записывается без проблем, но часто вмешивается в тестовый класс Jupiter, где правил нет. Перед запуском набора тестов убедитесь, что импортируется `org.junit`.

Подведем итог этой публикации следующим образом: