-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。 –