Java如何Mock FileInputStream问题

 更新时间:2023年09月21日 14:38:28   作者:JonTang  
这篇文章主要介绍了Java如何Mock FileInputStream问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java如何Mock FileInputStream

1. 最近在写UT(单元测试) 的过程

遇到需要 Mock 出 FileInputStream 的情况,在这里分享一下自己的解决方案。

需要 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 mockito mock InputStream

方案

使用apache commons的IOUtils直接构造一个基于String的InputStream,一些文本传输相关的测试的场景里非常实用。

Process mockProcess = mock(Process.class);
InputStream errorStream = org.apache.commons.io.IOUtils.toInputStream("error message", "UTF-8");
when(mockProcess.getErrorStream()).thenReturn(errorStream);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Hibernate命名策略详解

    Hibernate命名策略详解

    本文主要介绍了Hibernate命名策略。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Java 天生就是多线程

    Java 天生就是多线程

    这篇文章主要介绍了Java天生就是多线程,程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线程,更多相关内容需要的小伙伴可以参考一下
    2022-07-07
  • IntelliJ IDEA 安装及初次使用图文教程(2020.3.2社区版)

    IntelliJ IDEA 安装及初次使用图文教程(2020.3.2社区版)

    这篇文章主要介绍了IntelliJ IDEA 安装及初次使用(2020.3.2社区版),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 利用Socket.io 实现消息实时推送功能

    利用Socket.io 实现消息实时推送功能

    这篇文章主要介绍了利用Socket.io 实现消息实时推送功能,需要的朋友可以参考下
    2017-12-12
  • Java之HashMap.values()转List时的错误和正确演示

    Java之HashMap.values()转List时的错误和正确演示

    这篇文章主要介绍了Java之HashMap.values()转List时的错误和正确演示,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 一小时迅速入门Mybatis之bind与多数据源支持 Java API

    一小时迅速入门Mybatis之bind与多数据源支持 Java API

    这篇文章主要介绍了一小时迅速入门Mybatis之bind与多数据源支持 Java API,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Spring数据库连接池实现原理深入刨析

    Spring数据库连接池实现原理深入刨析

    开发web项目,我们肯定会和数据库打交道,因此就会涉及到数据库链接的问题。在以前我们开发传统的SSM结构的项目时进行数据库链接都是通过JDBC进行数据链接,我们每和数据库打一次交道都需要先获取一次链接,操作完后再关闭链接,这样子效率很低,因此就出现了连接池
    2022-11-11
  • java中double类型运算结果异常的解决方法

    java中double类型运算结果异常的解决方法

    下面小编就为大家带来一篇java中double类型运算结果异常的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 详解java实践SPI机制及浅析源码

    详解java实践SPI机制及浅析源码

    这篇文章主要介绍了详解java实践SPI机制及浅析源码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java跨域问题的处理详解

    Java跨域问题的处理详解

    这篇文章主要给大家介绍了关于Java跨域问题处理的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03

最新评论