Java 如何在类中模拟整数

Java 如何在类中模拟整数,java,junit,mocking,mockito,junit4,Java,Junit,Mocking,Mockito,Junit4,我最近遇到了一种情况,我们注入了一个int,其值在属性文件中声明 @Inject @ConfigurationParameter("someparameter") private int resetCount; 如何模拟此变量/依赖项。可能吗 现在我删除了privateaccess说明符,并使用类的对象设置了它的值。但是,如果我希望它被声明为私有,并且仍然希望注入值或模拟变量,该怎么办 注入主数据类型是一种好的做法吗?由spring framework提供的ReflectionTestUtil

我最近遇到了一种情况,我们注入了一个int,其值在属性文件中声明

@Inject
@ConfigurationParameter("someparameter")
private int resetCount;
如何模拟此变量/依赖项。可能吗

现在我删除了
private
access说明符,并使用类的对象设置了它的值。但是,如果我希望它被声明为私有,并且仍然希望注入值或模拟变量,该怎么办


注入主数据类型是一种好的做法吗?

由spring framework提供的ReflectionTestUtils类使用此选项,您可以设置该类的任何字段,而不考虑其访问修饰符

ReflectionTestUtils.setField(yourClassName, "resetCount", 5);

见我的答案最后,我找到了解决办法。在
Mockito
api中有一个名为
WhiteBox
的类,它可以设置对象的内部状态


一种方法是使用反射……话虽如此,我还是会尝试为私有字段维护getter和setter。这就是为什么通过构造函数进行注入更可取的原因之一——它使测试更容易。是的,我们还想到使用setter方法或反射。但我认为我们对此不感兴趣。然后我尝试使用
Integer
类代替数据类型并模拟该类。然后Mockito给出了一个例外,即不能模拟最终类。我不确定用
Integer
替换
int
对模拟有什么帮助。最好的替代方法是按照@AlanStokes的建议,通过构造函数注入这种依赖关系。此外,对于基本数据类型,您并不真正需要mock/double;只需指定值。至于如何指定值,如果是最终值,则使用构造函数注入;如果不是,您还可以选择添加setter方法。