Глобально устанавливая бегун JUnit вместо @RunWith

Не глядя на сам исходный код JUnit (мой следующий шаг), есть ли простой способ установить Runner по умолчанию, который будет использоваться с каждым тестом, без необходимости устанавливать @RunWith для каждого теста? У нас огромная куча юнит-тестов, и я хочу иметь возможность добавить некоторую поддержку по всем направлениям без необходимости изменять каждый файл.

В идеале я надеюсь на что-то вроде: -Djunit.runner="com.example.foo".

3 ответа

Решение

Я не думаю, что это можно определить глобально, но если вы можете написать свою собственную функцию main, вы можете сделать что-то подобное через код. Вы можете создать кастом RunnerBuilder и передать его Suite вместе с вашими тестовыми классами.

Class<?>[] testClasses = { TestFoo.class, TestBar.class, ... };
RunnerBuilder runnerBuilder = new RunnerBuilder() {
    @Override
    public Runner runnerForClass(Class<?> testClass) throws Throwable {
        return new MyCustomRunner(testClass);
    }
};
new JUnitCore().run(new Suite(runnerBuilder, testClasses));

Это не будет интегрировано с участниками тестирования пользовательского интерфейса, такими как в Eclipse, но для некоторых сценариев автоматического тестирования это может быть вариант.

JUnit не поддерживает глобальную настройку бегуна. Вы можете спрятать @RunWith в базовом классе, но это, вероятно, не поможет в вашей ситуации.

В зависимости от того, чего вы хотите достичь, вы можете повлиять на поведение теста в глобальном масштабе, используя RunListener, Вот как настроить его с помощью плагина Maven Surefire: http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html

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