NullPointerException when Mockito mocking ObjectOutputStream



我正在编写一个jUnit测试,检查一个类写入ObjectOutputStream的内容。

具体来说,我正在检查一个类是否正在使用某种类型调用 writeObject:

ObjectOutputStream out = mock(ObjectOutputStream.class);
out.writeObject(new Something());
verify(out).writeObject(isA(Something.class));

但是Java抱怨writeObject内部的NullPointerException。

我需要存根什么来解决这个问题?

这在 Mockito 中是不可能的。根据 ObjectOutputStream javadocs,writeOutput方法是最终的:

public final void writeObject(Object obj) throws IOException

在内部,Mockito实际上通过创建一个代理来模拟这些对象,该代理动态覆盖ObjectOutputStream。但是,由于writeObject方法是最终的,因此您无法覆盖或模拟它,并且Java调用原始方法。这被列为Mockito的限制之一。

虽然你可以验证writeObjectOverride,但你更好的选择实际上是重构你的代码以使用接口ObjectOutput而不是直接使用ObjectOutputStream。ObjectOutputStream 实现了 ObjectOutput,Mockito 可以模拟接口的任何方法。

相关内容

  • 没有找到相关文章

最新更新