Расширение от 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(),

Итак, вот что я пытаюсь выяснить.

  1. Можно ли расширить BlockJUnit4Runner, чтобы он брал список тестов и выполнял их как набор, а также запускал некоторый код до того, как будут выполнены какие-либо тесты, и после того, как все тесты будут выполнены?
  2. Как я могу расширить 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);

  }
}
Другие вопросы по тегам