当依赖项更改传递的引用的状态时,我无法对 void 方法进行单元测试并模拟依赖项。我知道可以在 void 方法上观察到副作用,也可以观察到行为,但我很难将这些准则应用于此代码。那里有类似的问题,但我找不到任何处理后续本地更改状态的内容。我正在使用 JUnit 和 Mockito ...这是我正在谈论的代码的人为版本:
@Mock
MergingObject mergingObject;
@Override
public void process(Foo foo1) {
Foo foo2 = getAnInstanceOfFoo(); // private
Foo foo3 = mergingObject.merge(foo1, foo2); // public
foo1.copySomeValues(foo3);
}
这里的难题是我是否为 MergingObject 对象创建了一个模拟。当我们模拟对象时,我期望的状态变化会消失,因为 merge(...) 操作永远不会被调用。我可以尝试验证是否使用 foo1 和 foo2 的正确实例调用了 merge(...),但随后的 copySomeValues(...) 调用仍会引发 NullPointerException。
有什么建议么?