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) メソッドに渡されたランナーが 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() メソッドをオーバーライドする手段があるかどうか、誰かに教えてもらえますか。

4

1 に答える 1

4

@RunWithアノテーションを使用していない可能性があります。独自の Runner を使用するには、すべての TestClass に @RunWith アノテーションを付ける必要があります。これにより、テストがそのランナーで実行されることが保証されます。

例:

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