如何模拟返回接口引用的新实例

时间:2018-05-01 16:48:19

标签: java junit mockito powermockito

我有这样的场景

var receivingId = req.body.recevingId;

我想模拟MyInterfaceImplementedClass,我试过下面的

MyInterface myObject = new MyInterfaceImplementedClass();
myObject.get(...)

请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

在评论中解决:

  

在@PrepareForTest中添加我的测试类之后,它按预期工作

简而言之,Mockito为您尝试模拟的类编写了一个生成的子类,这允许它拦截可覆盖的方法(即非最终实例方法)的行为。它处理所有接口和大多数抽象和具体类。但是,如果你试图模仿finalstatic方法的行为,包括构造函数,Mockito就无法做 1 :消费类包含对没有查找虚方法表的确切实际实现。唯一的出路是重写并替换现有类的字节码,这正是PowerMock所做的。

它通常只会覆盖您尝试模拟的类,但在某些情况下,您需要列出测试中的类或测试类本身。

因此,几乎所有运行PowerMock功能的测试都需要@PrepareForTest,以及@RunWith语句,以确保测试类使用PowerMock的类加载器来启用重写。

自从Mockito 2.1起,Mockito可以使用经过检测的类加载器来完成以前只在PowerMock中可用的部分