所以我试图模拟一个FileOutputStream,但它失败了,并出现了一个NullPointer异常,因为我不能模拟文件中的isInvalid方法。首先是我想模拟的代码:
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来解决这个问题呢?
我还尝试使用spy代替clsFileOutputStream的mock,但这不起作用,因为没有带0个参数的构造函数。
发布于 2017-04-04 22:09:45
您可以尝试用OutputStream替换FileOutputStream
而不是
public class MyClass {
public FileOutputStream createFileOutputStream( File clsFile ) throws FileNotFoundException
{
return new FileOutputStream( clsFile );
}
void doSomething(File file) {
// process file
....
FileOutputStream str = createFileOutputStream(file);
// process stream
}
}你有
public class MyClass {
public OutputStream createFileOutputStream( File clsFile ) throws FileNotFoundException
{
return new FileOutputStream( clsFile );
}
void doSomething(File file) {
// process file
....
OutputStream str = createFileOutputStream(file);
doSomething(str);
}
void doSomething(OutputStream stream) {
// process stream
}
}模拟OutputStream更加容易,并且可以将文件处理的测试与流处理的测试分开
https://stackoverflow.com/questions/43208037
复制相似问题