如何使用Mockito或任何其他relavent Java框架模拟超类方法 [英] How to mock super class method using Mockito or anyother relavent java framework

查看:330
本文介绍了如何使用Mockito或任何其他relavent 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");
  }
}

现在,我想模拟ChildClasschildRunner()方法,并且由于该方法内部调用了超类方法,因此我需要一些有关如何模拟run()方法的帮助/代码. ChildClasschildRunner()方法.

Now I want to mock the childRunner() method of ChildClass and since this method internally calls the super class method, i need some help/piece of code on how to mock the run() method which is present in the childRunner() method of ChildClass.

推荐答案

理想情况下,您应该主张继承优先于组成".

Ideally, you should "favor composition over inheritance".

如果没有此选项,则可以使用doNothing,它基本上告诉Mockito在调用模拟/间谍对象中的方法时不执行任何操作. 此处

If you don't have this option you could use doNothing which basically tells Mockito to do nothing when a method in a mock/spy object is called. This was also discussed here

以下代码示例应有所帮助

Following code example should help

@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();这是行不通的

In case you use super.run(); this won't work

这篇关于如何使用Mockito或任何其他relavent Java框架模拟超类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆