首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟FileOutputStream

模拟FileOutputStream
EN

Stack Overflow用户
提问于 2017-04-04 21:02:30
回答 1查看 4.2K关注 0票数 1

所以我试图模拟一个FileOutputStream,但它失败了,并出现了一个NullPointer异常,因为我不能模拟文件中的isInvalid方法。首先是我想模拟的代码:

代码语言:javascript
复制
FileOutputStream fos    = null;
fos = createFileOutputStream( file )

..。

代码语言:javascript
复制
public FileOutputStream createFileOutputStream( File clsFile ) throws FileNotFoundException
{
    return new FileOutputStream( clsFile );
}

我的相关模仿:

代码语言:javascript
复制
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个参数的构造函数。

EN

回答 1

Stack Overflow用户

发布于 2017-04-04 22:09:45

您可以尝试用OutputStream替换FileOutputStream

而不是

代码语言:javascript
复制
 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
    }
 }

你有

代码语言:javascript
复制
 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更加容易,并且可以将文件处理的测试与流处理的测试分开

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43208037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档