Правила (Rules) в JUnit 4

Внимание! Механизм правил, описанный в этой статье касается только JUnit 4. Начиная с JUnit 5 механизм правил является устаревшим. Его заменил новый механизм расширений.

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

В JUnit 4 есть несколько уже встроенных правил: TemporaryFolder, ExternalResource, ErrorCollector, VerifierRule, TestWatchman / TestWatcher, TestName, TimeoutExpectedException, ClassRule, RuleChain.

Правило TemporaryFolder

Позволяет создавать файлы и каталоги, которые удаляются по завершении метода.

По умолчанию никакой ошибки не возникает, если файл или каталог не удаётся удалить. Начиная с версии 4.13 TemporaryFolder  позволяет задать строгую проверку удаления, которая вызывает AssertionError, если файл(ы) и/или каталог(и) не удаётся удалить. Для включения этой строгой проверки нужно использовать метод builder:

Правила наследники ExternalResource

ExternalResource — базовый класс для правил (вроде TemporaryFolder), который настраивает внешний ресурс при старте (сокет, сервер, подключение к базе данных и т. д.) и гарантирует его корректное освобождение в конце.

Правило ErrorCollector

Используется для сбора ошибок, произошедших во время выполнения теста. Пример:

Правило Verifier

Базовый класс для правил вроде ErrorCollector, который может сделать результат теста неуспешным, который был бы успешным в противном случае.

Пример:

Правило TestWatcher / TestWatchman

TestWatcher  заменяет TestWatchman начиная с версии 4.9. Он реализует TestRule, а не MethodRule.
http://junit.org/javadoc/latest/org/junit/rules/TestWatcher.html

TestWatchman  был добавлен в JUnit 4.7, он использует MethodRule, который сейчас устарел.
http://junit.org/javadoc/latest/org/junit/rules/TestWatchman.html

TestWatcher  (и устаревший TestWatchman) — базовые классы для правил, которые записывают что-либо о тестируемом действии без его модификации. Например, этот класс будет хранить лог для каждого пройденного и проваленного теста.

Правило TestName

Правило TestName делает доступным имя теста внутри самого теста.

Правило Timeout

Правило Timeout  задаёт таймаут для всех тестовых методов в классе.

Правило ExpectedException

Позволяет задавать ожидаемые исключения и сообщения внутри метода:

ClassRule

Аннотация ClassRule  позволяет добавляеть статические поля, которые действуют на операции во всём классе. Любой дочерний класс от ParentRunner, включая стандартные классы BlockJUnit4ClassRunner и Suite , поддерживает ClassRules .

Пример тестов, в которых соединение с сервером происходит один раз перед запуском всех тестов, и отключение от сервера происходит после того, как они все закончатся.

RuleChain

Правило RuleChain позволяет выстраивать цепочку правил:

Выведет в лог следующее:

Пользовательские правила

Большинство пользовательских правил могут быть реализованы как расширение правила ExternalResource. Если же вам нужно больше информации о тестовом классе или методе, то вы можете реализовать интерфейс TestRule.

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

Затем правило может быть применено как здесь:

 

Один комментарий к “Правила (Rules) в JUnit 4”

  1. Кто вообще решает, что какой-то инструмент «устарел»?
    Кому дано это право и кем?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *