【发布时间】:2021-04-22 02:15:26
【问题描述】:
我正在尝试测试一种使用ObjectInputStream 从文件中读取数据的方法,但我想对ObjectInputStream 使用模拟。这个要测试的方法每次调用时都会实例化一个新的ObjectInputStream,所以我需要使用PowerMock来模拟构造函数,这样每次实例化ObjectInputStream时,它都会是一个模拟。这是我目前所拥有的:
@Test
public void test() throws Exception {
ObjectInputStream inputStream = mock(ObjectInputStream.class);
when(inputStream.readObject()).thenReturn(object);
PowerMockito.whenNew(ObjectInputStream.class).withAnyArguments().thenReturn(inputStream);
myFun() // call method to be tested
}
但是,由于某种原因,这不起作用,因为我在 when(inputStream.readObject()) 收到 NullPointerException,我不知道为什么。关于如何模拟 ObjectInputStream 的任何想法?
【问题讨论】:
-
你不必嘲笑一切。将
ByteArrayOutputStream传递给您的测试方法,然后检查其内容。 -
@chrylis-cautiouslyoptimistic- 关键是我不改变方法。由于该方法在其主体中实例化了一个新的 InputStream,因此我需要模拟构造函数。
-
但是
ObjectInputStream包装另一个底层输入流。 -
我真的不需要模拟
ObjectInputStream对象,我只需要使用PowerMock 来确保每次调用new ObjectInputStream()时,都会调用一个特定的ObjectInputStream(可能是我预定义的) ) 被退回。这可能吗? -
我非常怀疑您的代码是否调用了
new ObjectInputStream()。请提供相关部分。
标签: java mocking mockito powermockito