1

实际上我想覆盖 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)方法的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() 方法。

4

1 回答 1

4

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

例子:

@RunWith(MyRunner .class)
public class MyTest
{ 
  ....
}
于 2012-04-20T11:00:17.930 回答