使用mockito设置变量值

Gil*_*ian 3 unit-testing mockito

我有:

    SomeClass a = spy(SomeClass.class)
Run Code Online (Sandbox Code Playgroud)

SomeClassprivate int myValue

我想设置myVlaue为3。

我怎样才能使用 Mockito 做到这一点?

(如果 Mockito 不可能,那么我的下一个最佳选择是什么,最好不必放弃使用 Mockito 的代码)。

笔记:

  • 不建议嘲笑getMyValue(),我已经知道我可以做到这一点。
  • 不建议添加setMyValue(int newMyValue),我不想要。

Gil*_*ian 5

到目前为止我想到的最好的选择是反思:

Field myVarField = SomeClass.class.getDeclaredField("myVarField");
myVarField.setAccessible(true);
myVarField.set(someClass,3);
Run Code Online (Sandbox Code Playgroud)

  • 反思才是正确答案。除了`@InjectMocks`或[最近删除的内部类Whitebox](http://stackoverflow.com/q/40280918/1426891),Mockito根本不关心字段,所以你需要处理字段访问你自己或者打电话给你的间谍的设置者。 (2认同)