自定义 JUnit RunnerBuilder

Custom JUnit RunnerBuilder

如何告诉 JUnit 使用我自己创建的自定义 RunnerBuilder 实现?

使用自定义 Runner 就像提供 @RunWith 注释一样简单。不过,我看不出如何告诉 JUnit 使用哪个 RunnerBuilder

The example in the JavaDoc 仍然没有显示如何指定 RunnerBuilder

根据@Duncan 的建议,我没有理会 RunnerBuilder,而是选择让我的 Runner 实现自己进行注释查找。

在这个例子中,我有一个运行器委托给另一个运行器,由一个注释定义,并且还使用另一个注释来定义 类 应该由不同的类加载器加载。

亚军:

public QuarantiningRunner(Class<?> testFileClass) throws InitializationError
{
    delegateRunningToDiscoverer = new DelegateRunningToDiscoverer();
    quarantinedPatternDiscoverer = new QuarantinedPatternDiscoverer();
    Class<? extends Runner> delegateRunningTo = delegateRunningToDiscoverer.getDelegateRunningToOn(testFileClass);
    ...

注解发现者之一:

public class DelegateRunningToDiscoverer
{
    public Class<? extends Runner> getDelegateRunningToOn(Class<?> testClass)
    {
        Class<? extends Runner> runnerClass = BlockJUnit4ClassRunner.class;
        DelegateRunningTo annotation = testClass.getAnnotation(DelegateRunningTo.class);

        if(annotation != null)
        {
            runnerClass = annotation.value();
        }

        return runnerClass;
    }
}