-2
所以我試圖嘲笑一個FileOutputStream,但它與NullPointer異常失敗,因爲我不能從文件模擬方法isInvalid。 首先代碼中,我想嘲笑:嘲諷FileOutputStream
FileOutputStream fos = null;
fos = createFileOutputStream(file)
...
public FileOutputStream createFileOutputStream(File clsFile) throws FileNotFoundException
{
return new FileOutputStream(clsFile);
}
我與嘲笑:
File clsFile = Mockito.mock(File.class);
Mockito.when(clsUnitUnderTest.createNewFile(strTargetPath + "XXX" + strTargetFileName)).thenReturn(clsFile);
Mockito.when(clsFile.exists()).thenReturn(true);
Mockito.when(clsFile.createNewFile()).thenReturn(true);
Mockito.when(clsFile.renameTo(new File(strTargetPath + strTargetFileName))).thenReturn(false);
Mockito.when(clsFile.getPath()).thenReturn(strTargetPath + "XXX" + strTargetFileName);
// Mockito.when(clsFile.isInvalid).thenReturn(false); not working because isInvalid is final!!
FileOutputStream clsFileOutputStream = Mockito.mock(FileOutputStream.class);
Mockito.when(clsUnitUnderTest.createFileOutputStream(clsFile)).thenReturn(clsFileOutputStream);
我知道有沒有辦法嘲笑最終方法isInvalid。但有沒有另一種方法來解決這個問題,而不使用PowerMokito?
我也嘗試使用間諜,而不是模擬clsFileOutputStream,但這是行不通的,因爲沒有0參數的構造函數。
你爲什麼首先爲良好的JDK類編寫測試? –
@ M.Prokhorov我沒有測試File或FileOutputStream。我在我的程序中使用它們,並且想嘲笑它們,因爲它們表現良好。測試其他代碼更重要,因此我需要輕鬆操作File和FileOutputStream的可能性。 – Ganymed
你的測試似乎依賴於模擬在這種情況下不能真正嘲笑的東西的能力。我可能會建議爲該部分編寫集成測試,或者重構,這樣您就不必在過程中模擬一半的JDK。 –