Как работает Junit @Rule?
Я хочу написать тестовые случаи для большого количества кода, я хотел бы знать подробности JUnit @Rule аннотаций, так что я могу использовать его для написания тестов. Пожалуйста, предоставьте несколько хороших ответов или ссылок, которые дают подробное описание его функциональности на простом примере.
4 ответов:
правила используются для добавления дополнительных функций, которые применяются ко всем тестам в тестовом классе, но более общим способом.
например, ExternalResource выполняет код до и после тестового метода, без использования
@Beforeи@After. ИспользуяExternalResource, а не@Beforeи@Afterпредоставляет возможности для лучшего повторного использования кода; одно и то же правило может использоваться из двух разных классов тестов.конструкция была основана на: перехватчики в JUnit
для получения дополнительной информации см. JUnit wiki: правила.
правила Junit работают по принципу AOP (аспектно-ориентированное программирование). Он перехватывает метод тестирования, тем самым предоставляя возможность сделать некоторые вещи до или после выполнения конкретного метода тестирования.
возьмем пример кода ниже:
public class JunitRuleTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @Test public void testRule() throws IOException { File newFolder = tempFolder.newFolder("Temp Folder"); assertTrue(newFolder.exists()); } }каждый раз при выполнении указанного выше метода тестирования создается временная папка, которая удаляется после выполнения метода. Это пример правила out-of-box, предоставленного тесты JUnit.
подобное поведение также может быть достигнуто путем создания собственных правил. Junit предоставляет интерфейс TestRule, который может быть реализован для создания собственного правила Junit.
вот полезная ссылка за ссылкой:
нашел в этой статье объясняется
@Rules довольно хорошо, особенно проверьте последний раздел "последовательность событий в деталях"
tl;dr для того, как это работает: JUnit обертывает ваш тестовый метод в оператор object so statement.Выполнить() запускает тест. Тогда вместо вызова оператора.Выполнить() напрямую, чтобы запустить тест в JUnit передает заявление на TestRule с аннотацией @правило. Функция TestRule "apply" возвращает новый оператор, заданный оператором с вашим тестом. Метод Execute () нового оператора может вызывать метод execute оператора test (или нет, или вызывать его несколько раз) и делать все, что он хочет до и после. Теперь у JUnit есть новый оператор, который делает больше, чем просто запускает тест, и он может снова передать это в любые другие правила, Прежде чем, наконец, вызвать Execute.
Comments