実際には、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() method から来ていると思います。
// This is JUnit4Builder.runnerForClass(Class<?>) method
public Runner runnerForClass(Class<?> testClass) throws Throwable
{
return new BlockJUnit4ClassRunner(testClass);
}
JUnit4Builder.runnerForClass() もオーバーライドしようとしましたが、それも役に立ちませんでした。MyRunner を渡す方法があるかどうか、または BlockJUnit4ClassRunner.runChild() メソッドをオーバーライドする手段があるかどうか、誰かに教えてもらえますか。