我希望创建一个cls类的Mockito模拟对象:
public class cls{
private var;
cls(String x){
var = x;
}
}
这是我的代码:
cls obj = mock(cls.class)
obj创建成功,但是var为null,因为没有参数传递给构造函数.此外,我无法使用powermockito.
创建模拟对象时如何将参数传递给cls的构造函数?
解决方法:
var是私有的.这是一个实现细节. Mockito的全部要点是,您希望避免现有实现的任何方面,而将其替换为一个对象,该对象尽管具有完全伪造的实现,但实际上与被测类进行交互.
在后台,Mockito使用Objenesis或ByteBuddy创建对象而无需调用构造函数.因此,在任何情况下,创建模拟都不会具有现实的构造函数.我建议改用任何使用var的方法.
另一方面,如果要选择性地存根或验证其中一些方法但具有实际字段,则可以始终创建间谍:
cls obj = spy(new cls(100));
因为您正在调用一个真正的构造函数,所以将现实地设置类的字段,然后将其复制到要调用obj的新对象中.