创建一个mockito对象,该对象采用java中的参数

创建一个mockito对象,该对象采用java中的参数,java,mocking,mockito,Java,Mocking,Mockito,我希望创建类cls的Mockito mock对象: public class cls{ private var; cls(String x){ var = x; } } 这是我的密码: cls obj = mock(cls.class) obj创建成功,但var为null,因为没有向构造函数传递任何参数。此外,我不能使用powermockito。 创建模拟对象时,如何将参数传递给cls的构造函数?您不需要设置变量 您需要的是,当您的模拟客户端启动您控制的操作时,它们将返回预期值。请注意调

我希望创建类cls的Mockito mock对象:

public class cls{
private var;

cls(String x){
var = x;
}

}
这是我的密码:

cls obj = mock(cls.class)
obj创建成功,但var为null,因为没有向构造函数传递任何参数。此外,我不能使用powermockito。
创建模拟对象时,如何将参数传递给cls的构造函数?

您不需要设置变量

您需要的是,当您的模拟客户端启动您控制的操作时,它们将返回预期值。请注意调用的方法和返回值


我建议您学习并遵循Java编码惯例。如果您不这样做,则代码更难阅读。

var
是私有的。这是一个实现细节。Mockito的全部要点是,您希望避免现有实现的任何方面,并将其替换为一个对象,该对象与您的被测类进行实际交互,尽管有一个完全虚假的实现

在后台,Mockito使用Objenesis或ByteBuddy创建对象,而不调用构造函数。因此,在任何情况下,创建模拟都不会有一个真实的构造函数。我建议使用
var
替代stub

另一方面,如果您希望有选择地存根或验证其中一些方法,但具有真实字段,则始终可以创建间谍:

cls obj = spy(new cls(100));

因为您正在调用一个真正的构造函数,所以类的字段将实际设置,然后复制到您正在调用的新对象中
obj

没有需要调用的方法。我只需要一个obj,它的值设置为var。构造函数是唯一可以完成它的方法,因为var是私有的。你能写一些代码来说明它是如何完成的吗?模拟的客户端对这个对象做了什么?为什么不干脆打电话给新公司,就这样了结它呢?在这种情况下,我看不出使用mock的理由。你真的需要使用mock对象吗?如果可能,请始终使用真实对象,如果无法使用真实对象(例如访问数据库或外部资源的模拟类),请使用模拟。在本例中,您可以使用测试数据构建对象。模拟用于模拟行为,而不是值。