2016-12-13 23 views
13

Я пишу тест JUnit4, в котором я использую правило TemporaryFolder. Кажется, что он отлично работает как с @Rule, так и с @ClassRule. В чем разница между Junit @Rule и @ClassRule? Почему я должен использовать один, а не другой?Junit @Rule и @ClassRule

ответ

23

Различие становится понятным, если у вас есть несколько методов испытаний в классе.

A @ClassRule имеет свой метод before() перед любым из методов испытаний. Затем запускаются все методы тестирования и, наконец, метод after() правила. Поэтому, если у вас есть пять методов тестирования в классе, то before() и after() по-прежнему будут запускаться только один раз.

@ClassRule относится к статическому методу и поэтому имеет все ограничения, присущие этому.

A @Rule вызывает тесты, которые должны выполняться с помощью метода apply() правила, который может выполнять действия до и после запуска целевого метода. Если у вас есть пять методов тестирования, правило apply() вызывается пять раз, как обертка вокруг каждого метода.

Используйте @ClassRule, чтобы настроить то, что может быть повторно использовано всеми методами тестирования, если вы можете достичь этого в статическом методе.

Используйте @Rule для создания чего-то, что необходимо создать заново или сбросить для каждого метода тестирования.

1

@Rule не может быть настроен для запуска до @BeforeClass.

В то время как @ClassRule должен быть на статическом методе.