Я хочу написать контрольные примеры для большей части кода, я хотел бы узнать подробности о @Rule
функции аннотации JUnit , чтобы я мог использовать ее для написания контрольных примеров. Пожалуйста, предоставьте несколько хороших ответов или ссылок, которые дают простое описание его функциональности на простом примере.
java
junit
junit4
junit-rule
Дипак
источник
источник
@Rule
довольно хорошо, особенно ознакомьтесь с последним разделом «Последовательность событий в деталях»Ответы:
Правила используются для добавления дополнительной функциональности, которая применяется ко всем тестам в классе теста, но в более общем виде.
Например, ExternalResource выполняет код до и после тестового метода, без использования
@Before
и@After
. ИспользованиеExternalResource
вместо@Before
и@After
дает возможности для лучшего повторного использования кода; одно и то же правило можно использовать из двух разных тестовых классов.Дизайн был основан на: Перехватчики в JUnit
Для получения дополнительной информации см. JUnit wiki: Rules .
источник
Правила Junit работают по принципу АОП (аспектно-ориентированное программирование). Он перехватывает тестовый метод, таким образом предоставляя возможность сделать некоторые вещи до или после выполнения определенного тестового метода.
Возьмите пример кода ниже:
Каждый раз, когда выполняется вышеуказанный метод тестирования, создается временная папка, которая удаляется после выполнения метода. Это пример стандартного правила, предоставленного Junit.
Подобное поведение также может быть достигнуто путем создания наших собственных правил. Junit предоставляет интерфейс TestRule, который может быть реализован для создания нашего собственного правила Junit.
Вот полезная ссылка для справки:
источник
Объяснение того, как это работает:
JUnit оборачивает ваш тестовый метод в объект Statement, так и
Execute()
выполняет ваш тест. Затем вместоstatement.Execute()
прямого вызова для запуска теста JUnit передает инструкцию в TestRule с@Rule
аннотацией. Функция «применения» TestRule возвращает новый оператор, заданный оператором с вашим тестом. НовыйExecute()
метод Statement может вызывать метод execute тестового Statement (или нет, или вызывать его несколько раз) и делать все, что захочетbefore and after
.Теперь у JUnit есть новый оператор, который делает больше, чем просто запускает тест, и он может снова передать его другим правилам, прежде чем, наконец, вызвать Execute.
источник
Правила используются для улучшения поведения каждого метода тестирования в общем виде. Правило Junit перехватывает тестовый метод и позволяет нам что-то делать до того, как тестовый метод начнет выполнение и после того, как тестовый метод был выполнен.
Например, используя правило @Timeout, мы можем установить время ожидания для всех тестов.
Правило @TeoraryFolder используется для создания временных папок, файлов. Каждый раз, когда выполняется метод теста, создается временная папка, которая удаляется после выполнения метода.
Вы можете увидеть примеры некоторых встроенных правил, предоставленных junit по этой ссылке .
источник