Я пишу тест JUnit4, в котором я использую правило TemporaryFolder. Кажется, что он отлично работает как с @Rule, так и с @ClassRule. В чем разница между Junit @Rule и @ClassRule? Почему я должен использовать один, а не другой?Junit @Rule и @ClassRule
ответ
Различие становится понятным, если у вас есть несколько методов испытаний в классе.
A @ClassRule
имеет свой метод before()
перед любым из методов испытаний. Затем запускаются все методы тестирования и, наконец, метод after()
правила. Поэтому, если у вас есть пять методов тестирования в классе, то before()
и after()
по-прежнему будут запускаться только один раз.
@ClassRule
относится к статическому методу и поэтому имеет все ограничения, присущие этому.
A @Rule
вызывает тесты, которые должны выполняться с помощью метода apply()
правила, который может выполнять действия до и после запуска целевого метода. Если у вас есть пять методов тестирования, правило apply()
вызывается пять раз, как обертка вокруг каждого метода.
Используйте @ClassRule
, чтобы настроить то, что может быть повторно использовано всеми методами тестирования, если вы можете достичь этого в статическом методе.
Используйте @Rule
для создания чего-то, что необходимо создать заново или сбросить для каждого метода тестирования.
@Rule не может быть настроен для запуска до @BeforeClass.
В то время как @ClassRule должен быть на статическом методе.