ape*_*ker 0 java junit mocking objectoutputstream mockito
我正在编写一个jUnit测试,检查类将什么写入ObjectOutputStream。
具体来说,我正在检查一个类是否正在以某种类型调用writeObject:
ObjectOutputStream out = mock(ObjectOutputStream.class);
out.writeObject(new Something());
verify(out).writeObject(isA(Something.class));
Run Code Online (Sandbox Code Playgroud)
但是Java抱怨里面有NullPointerException writeObject。
我需要存根解决此问题吗?
Mockito无法做到这一点。根据ObjectOutputStream javadocs,该writeOutput方法是最终的:
public final void writeObject(Object obj) throws IOException
Run Code Online (Sandbox Code Playgroud)
在内部,Mockito实际上通过创建Proxy来模拟这些对象,该Proxy动态覆盖ObjectOutputStream。由于该writeObject方法是最终方法,因此您将无法覆盖或模拟该方法,而Java会调用该方法。这被列为Mockito的限制之一。
尽管您可以进行验证writeObjectOverride,但是更好的选择实际上是重构代码,以直接使用ObjectOutput接口而不是ObjectOutputStream 接口。ObjectOutputStream实现ObjectOutput,而Mockito可以模拟接口的任何方法。
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |