如何使用 Mockito 或任何其他相关的 java 框架模拟超类方法

新手上路,请多包涵

我的场景如下

class SuperClass{
   public void run(){
      System.out.println("I am running in Super class");
   }
}

class ChildClass extends SuperClass{
  public void childRunner(){
     System.out.println("Step 1");
     System.out.println("Step 2");
     **run();**
     System.out.println("Last Step");
  }
}

现在我想测试 childRunner() 方法 ChildClass 因为这个方法在内部调用超类方法,我需要一些帮助/一段代码来模拟 run() 存在于 SuperClass 中的方法。

原文由 Ravi Kiran Y 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 736
1 个回答

理想情况下,您应该“更喜欢组合而不是继承”。

如果你没有这个选项,你可以使用 doNothing 这基本上告诉 Mockito 在调用模拟/间谍对象中的方法时什么都不做。这也被讨论 here

以下代码示例应该有所帮助

@Test
public void tst() {
    ChildClass ch = Mockito.spy(new ChildClass());
    Mockito.doNothing().when((SuperClass)ch).run();
    ch.childRunner();

}

class SuperClass{
    public void run(){
        System.out.println("I am running in Super class");
    }
}

class ChildClass extends SuperClass{
    public void childRunner(){
        System.out.println("Step 1");
        run();
        System.out.println("Last Step");
    }
}

输出:

 Step 1
Last Step

如果你使用 super.run();这行不通

原文由 Liviu Stirb 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题