Пользовательский JUnit Runner, который делегирует стандартные бегуны

В настоящее время я создаю модуль пользовательского запуска JUnit (который будет точно вызывать пользовательский код до/после каждого метода тестирования), например.

class MyRunner extends BlockJUnit4ClassRunner {

    private MyApi api = new MyApi();

    public MyRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    // todo

}

Тем не менее, я хотел бы поддержать других бегунов, например. MockitoJunitRunner и SpringRunner, поэтому вместо того, чтобы заново изобретать колесо, я хотел бы использовать свой бегун следующим образом (используя пользовательскую аннотацию MyConfig для указания существующих тестовых бегунов): -

@RunWith(MyRunner.class)
@MyConfig(testRunner=MockitoJUnitRunner.class)
public class MockitoRunnerTest {

}

... or ...

@RunWith(MyRunner.class)
@MyConfig(testRunner=SpringRunner.class)
public class MockitoRunnerTest {

}

Это означает, что средство запуска тестов очень легкое, то есть оно похоже на правило Junit и просто проксирует другое существующее средство запуска Junit после вызова его собственного кода.

Я чувствую, что это уже реализовано/решено - просто есть проблемы с его поиском.

ПРИМЕЧАНИЕ. Я хочу избежать использования правил из-за этих проблем — см. Применить '@Rule' после каждого '@Test' и перед каждым '@After' в JUnit


person bobmarksie    schedule 25.03.2018    source источник
comment
может быть, вам просто нужно использовать логику SpringRunner или MockitoRunner внутри вашего класса MyRunner? попробуйте @autowire их или создайте новый экземпляр и просто используйте его методы   -  person davidluckystar    schedule 25.03.2018
comment
Да, это одно из решений, но оно означает как минимум 3 строки кода, то есть автоматическое подключение (или создание экземпляра вручную) службы, вызов кода внутри метода @Before (и создание этого метода setup, если он не существует) а также вызов кода внутри метода @After (а также создание этого метода tearDown, если он не существует). На самом деле ищу более СУХОЕ решение, но согласен, что делегирование другому существующему (более авторитетному) бегуну, такому как SpringRunner, тоже не идеально. Попытка вызвать API этого проекта с открытым исходным кодом — github.com/videofirst/vft-capture   -  person bobmarksie    schedule 25.03.2018
comment
Какое решение вы выбрали в итоге?   -  person Geraint Ballinger    schedule 19.10.2018
comment
Я просто использовал правила в конце - хотя я сказал, что хочу их избежать :-)   -  person bobmarksie    schedule 20.10.2018