如何传递我们自己的跑步者而不是BlockJUnit4ClassRunner

时间:2012-04-20 09:09:23

标签: junit4

实际上我想覆盖BlockJUnit4ClassRunner的runChild()方法,因此我创建了一个类(MyRunner.java)并释放了BlockJUnit4ClassRunner并重写了runChild()方法。

public class MyRunner extends BlockJUnit4ClassRunner
{

@Override
public void runChild(final FrameworkMethod method, RunNotifier notifier) {
    System.out.println("<--------- Inside MyRunner.runChild() -------->");
    // my code goes here
}

}

但调用不会转到我的重写方法(它甚至没有到MyRunner.java),只调用BlockJUnit4ClassRunner.runChild()方法。 我调试后发现这是因为传递给JunitCore.run(Runner runner)方法的运行器是BlockJUnit4ClassRunner。 我不确定这个,但我认为这可能来自JUnit4Builder.runnerForClass()方法。

// This is JUnit4Builder.runnerForClass(Class<?>) method
public Runner runnerForClass(Class<?> testClass) throws Throwable 
{
    return new BlockJUnit4ClassRunner(testClass);
}

我试图覆盖JUnit4Builder.runnerForClass(),但这也没有帮助。 如果有任何方法可以通过MyRunner或任何方法来覆盖BlockJUnit4ClassRunner.runChild()方法,任何人都可以告诉我。

1 个答案:

答案 0 :(得分:4)

您可能没有使用@RunWith注释。为了使用您自己的Runner,您需要使用@RunWith注释来注释每个TestClass。这将确保您的测试与该跑步者一起执行。

示例:

@RunWith(MyRunner .class)
public class MyTest
{ 
  ....
}