我正在编写一个jUnit测试,检查一个类写入ObjectOutputStream的内容。
具体来说,我正在检查一个类是否使用某种类型调用writeObject:
ObjectOutputStream out = mock(ObjectOutputStream.class);
out.writeObject(new Something());
verify(out).writeObject(isA(Something.class));
但是Java抱怨writeObject
内的NullPointerException。
我需要什么来解决这个问题?
答案 0 :(得分:5)
Mockito无法做到这一点。根据{{3}},writeOutput
方法是最终的:
public final void writeObject(Object obj) throws IOException
在内部,Mockito实际上通过创建ObjectOutputStream javadocs来嘲笑这些对象,它会动态覆盖ObjectOutputStream。但是,因为writeObject
方法是最终的,所以您无法覆盖或模拟它,Java会调用原始方法。这被列为Proxy之一。
虽然您可以对writeObjectOverride
进行验证,但实际上更好的做法是重构代码以直接使用接口limitations of Mockito而不是ObjectOutputStream。 ObjectOutputStream实现ObjectOutput,Mockito可以模拟接口的任何方法。