我希望创建类cls的Mockito模拟对象:
public class cls{
private var;
cls(String x){
var = x;
}
}
这是我的代码:
cls obj = mock(cls.class)
obj创建成功,但var为null,因为没有参数传递给构造函数。此外,我不能使用powermockito。 如何在创建模拟对象时将参数传递给cls的构造函数?
答案 0 :(得分:3)
var
是私有的。这是一个实现细节。 Mockito的全部意义在于,您希望避免现有实现的任何方面,并将其替换为与您的测试类实际交互的对象,尽管具有完全虚假的实现。
在幕后,Mockito使用Objenesis或ByteBuddy创建对象而不调用构造函数。因此,在任何情况下创建模拟都不会有真实的构造函数。我建议改为使用var
消耗任何方法。
另一方面,如果您想有选择地存根或验证其中一些方法但具有真实的字段,您可以随时创建一个间谍:
cls obj = spy(new cls(100));
因为你正在调用一个真正的构造函数,所以类的字段将被逼真地设置,然后被复制到你正在调用obj
的新对象中。
答案 1 :(得分:0)
您不需要设置变量。
您需要的是模拟的客户在启动您控制的操作时获取预期值。注意调用的方法和返回值。
我建议您学习并遵循Java编码约定。如果你没有,你的代码就更难阅读。