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