Почти во всех статьях о написании приёмочных тестов с использованием junit, встречается упоминание аннотаций @Before, @BeforeClass, @After и @AfterClass. Использование отдельных методов с этими аннотациями для инициализации тестов и очистки окружения после их выполнения - практика хорошая, но уже устаревшая.
Рулы появились в junit достаточно давно (начиная с версии 4.7) и представляют собой эволюцию setup-teardown методов. Рула представляет собой класс, который следит за выполнением теста и может реагировать на изменение его состояния - старт, окончание, успешное и неуспешное прохождение и даже пропуск теста. Для каждого из состояний у рулы есть соответствующий метод:
Имея такой набор, мы можем полностью контролировать состояние теста. Например, выполнять очистку окружения только в случае неудачного прохождения (такого удобства при использовании старых setup-teardown методов ты не добъёшься без костылей). Естесственно, рулы позволяют очень удобно и прозрачно переиспользовать код - достаточно добавить соответствующую рулу в твой тестовый класс:
Аннотации @Rule и @ClassRule определяют, будет ли рула применена для каждого теста в классе или один раз для всего класса (по аналогии с @Before и @BeforeClass). А используя класс RuleChain, ты можешь выстраивать цепочки рул в нужной тебе последовательности.
comments powered by Disqus