0


Java 如何 Mock FileInputStream

前言:

    最近在写 UT(单元测试) 的过程中,遇到需要 Mock 出 FileInputStream 的情况,在这里分享一下自己的解决方案。
  1. 需要 Mock 的类: public class Class1 { public Class1() { } public boolean method1() { try { FileInputStream fileInputStream = new FileInputStream("file.txt"); } catch (FileNotFoundException e) { e.printStackTrace(); return false; } return true; }}
  2. 测试类如下: @RunWith(PowerMockRunner.class)@PrepareForTest(Class1.class)public class Class1Test { @Test public void method1Test() throws Exception { Class1 class1 = new Class1(); FileInputStream fileInputStreamMock = mock(FileInputStream.class); whenNew(FileInputStream.class).withAnyArguments().thenReturn(fileInputStreamMock); boolean expected = true; boolean actual = class1.method1(); assertEquals(expected, actual); }}

注意:

    在单元测试中我使用了 **@PrepareForTest(Class1.class)**,而没有使用 @PrepareForTest(FileInputStream.class)
    3. 如果需要实际读取一个文件时,例如要读取 resources 目录下的某个文件,可以将代码修改为如下所示:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Class1.class)
public class Class1Test {

    @Test
    public void method1Test() throws Exception {

        Class1 class1 = new Class1();

        String path = new File(getClass().getClassLoader().getResource("file.txt").getFile()).getCanonicalPath();
        FileInputStream fileInputStream = new FileInputStream(path);

        whenNew(FileInputStream.class).withAnyArguments().thenReturn(fileInputStreamMock);

        boolean expected = true;
        boolean actual = class1.method1();

        assertEquals(expected, actual);

    }

}

PS:补充一下自己的pom依赖

<dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.7.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.7.4</version>
        <scope>test</scope>
    </dependency>
</dependencies>
标签: java 单元测试

本文转载自: https://blog.csdn.net/JonTang/article/details/125789143
版权归原作者 JonTang 所有, 如有侵权,请联系我们删除。

“Java 如何 Mock FileInputStream”的评论:

还没有评论