【发布时间】:2012-02-17 12:26:42
【问题描述】:
我正在用 java 测试一个输出流,如下所示。
Writer outputStream = getOutputStream(fileName);
if(outputStream != null) {
try {
outputStream.write(inputText);
}
finally {
outputStream.close();
}
}
else {
throw new IOException("Output stream is null");
}
我正在编写如下模拟测试
public void testFileWrite() throws IOException {
when(testObj.getOutputStream(outputFileNameValidValue)).thenReturn(outputStreamMock);
doNothing().when(outputStreamMock).write(Matchers.anyString());
doNothing().when(bufferedReaderMock).close();
testObj.write(outputFileNameValidValue, reveredFileInput);
verify(outputStreamMock).write(Matchers.anyString());
verify(outputStreamMock).close();
}
问题是当您创建OutputStreamWriter(new FileOutputStream(filename)) 时,会在磁盘上创建一个物理文件。
我们可以测试Outputstream.write 而不实际在磁盘上写入文件吗?
谢谢 阿南德
【问题讨论】:
-
请澄清 - 你在哪里创建
OutputStreamWriter- 我在你的代码中看不到它。我猜它在getOutputStream之内——除了你已经取消了这个方法。如果您希望人们做好帮助您的工作,您需要发布所有代码。此外,getOutputStream可能应该被称为其他名称(可能是makeWriter),因为它没有得到OutputStream。 -
在 getOutputStream 方法中。我将其移至方法的原因是希望 mockito 不会运行 mthod 并返回 mock。但我错了。
-
在谷歌搜索和阅读一些文档后发现 PowerMock 可以轻松做到这一点。使用 expectNew 或使用 suppressConstructor 和 Whitebox.setInsternalState。使用 PowerMock 测试这些东西要容易得多。感谢大家的 cmets 和回答.. 问候,Anand Barhate