我正在測試java中的輸出流,如下所示。在不創建文件的情況下測試outputstream.write(<String>)
Writer outputStream = getOutputStream(fileName);
if(outputStream != null) {
try {
outputStream.write(inputText);
}
finally {
outputStream.close();
}
}
else {
throw new IOException("Output stream is null");
}
我寫一個測試的Mockito如下
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'。 – 2012-02-18 00:53:30
在getOutputStream方法中。我之所以把它移到這個方法上,是希望mockito不會運行方法並返回模擬。但我錯了。 – Anand 2012-02-18 06:22:30
谷歌搜索和閱讀很少的文檔後發現,PowerMock可以很容易地做到這一點。使用expectNew或使用suppressConstructor和Whitebox.setInsternalState。用PowerMock測試這些東西很容易。謝謝你的意見和答案..問候,阿南德巴爾哈特 – Anand 2012-02-18 06:24:51