0

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

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

ObjectOutputStream out = mock(ObjectOutputStream.class);

out.writeObject(new Something());

verify(out).writeObject(isA(Something.class));

但是 Java 抱怨在writeObject.

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

4

1 回答 1

5

这对于 Mockito 是不可能的。根据ObjectOutputStream javadocs,该writeOutput方法是最终的:

public final void writeObject(Object obj) throws IOException

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

尽管您可能能够针对 进行验证writeObjectOverride,但实际上最好的办法是重构您的代码以直接使用接口ObjectOutput而不是 ObjectOutputStream。ObjectOutputStream 实现了 ObjectOutput,而 Mockito 可以模拟接口的任何方法。

于 2013-09-19T18:18:49.267 回答