Расширение от Suite Runner против BlockJUnit4Runner при определении некоторых TestRules
У меня есть требование написать много тестов. Я расширил Suite Runner из JUnit, чтобы иметь возможность добавлять новые аннотации, в которых я могу упомянуть несколько классов Prerequisite, которые будут выполнены перед выполнением любого из тестов или установок. Мой Типичный тест выглядит следующим образом.
@RunWith(CustomSuiteRunner.class)
@BeforeSuite(Prerequisite.class)
@AfterSuite(CleanupOperations.class)
@Suite.SuiteClasses({
SimpleTests.class,
WeatherTests.class
})
public class SimpleSuite {
}
Я переопределил public void run(final RunNotifier notifier)
добавить код, необходимый для запуска предварительных условий и операций очистки, упомянутых в аннотациях BeforeSuite и AfterSuite.
Теперь я пытаюсь выяснить, как я могу добиться того же, расширяя BlockJUnit4Runner
? Я не могу найти метод, эквивалентный для запуска, который запускает выполнение, чтобы переопределить поведение. Существует runChild, который запускается до того, как ребенок будет казнен.
Причина, по которой я ищу это, заключается в том, что я пытаюсь создать несколько правил в Интерфейсе и сделать так, чтобы мои тесты реализовали их так, чтобы они были доступны, однако, поскольку элементы интерфейса являются статическими, а окончательный JUnit игнорирует их. В другом вопросе, который я задал сегодня, я получил ответ, что могу заставить JUnit учитывать правила, упомянутые в интерфейсе, расширяя BlockJUnit4Runner и переопределяя getTestRules()
,
Итак, вот что я пытаюсь выяснить.
- Можно ли расширить BlockJUnit4Runner, чтобы он брал список тестов и выполнял их как набор, а также запускал некоторый код до того, как будут выполнены какие-либо тесты, и после того, как все тесты будут выполнены?
- Как я могу расширить Suite Runner, чтобы учесть TestRules, определенные в реализованном интерфейсе?
1 ответ
В значительной степени возможно расширить BlockJUnit4Runner и заставить его взять список тестов и запустить их как набор с необходимыми тестовыми зависимостями, обрабатываемыми в расширенном методе runChild()
public class CustomRunner extends BlockJUnit4ClassRunner {
private List<String> testsToRun = Arrays.asList(new String[] { “sample1” });
public CustomRunner(Class<?> klass) throws InitializationError {
super(klass);
}
public void runChild(FrameworkMethod method, RunNotifier notifier) {
//Handle any dependency logic by creating a customlistener registering notifier
super.runChild(method,notifier);
}
}