实际上我想覆盖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()方法,任何人都可以告诉我。
答案 0 :(得分:4)
您可能没有使用@RunWith注释。为了使用您自己的Runner,您需要使用@RunWith注释来注释每个TestClass。这将确保您的测试与该跑步者一起执行。
示例:
@RunWith(MyRunner .class)
public class MyTest
{
....
}