首先考虑使用

IOUtils.closeQuietly(),它会将未经测试的代码(可能是重复代码)减少为:

try {

f = new BufferedInputStream(new FileInputStream(source));

f.read(buffer);

} finally {

IoUtils.closeQuietly(f);

}

现在变得艰难. “正确”的方法是将BufferedInputStream的创建外部化到另一个类中并注入mock.有了一个模拟,你可以验证是否调用了适当的close()方法.

@ JeffFoster的答案非常接近我的意思,但是我会推荐组合而不是继承(以更多的代码为代价):

try {

f = fileSystem.open(source);

f.read(buffer);

} finally {

IoUtils.closeQuietly(f);

}

其中fileSystem是FileSystem接口的一个实例,其中简单的实际实现在生产代码中注入或模拟用于测试.

interface FileSystem {

InputStream open(String file);

}

外部化文件打开的另一个好处是,如果您决定删除缓冲或添加加密,则只需要修改一个位置.

使用该接口,您可以使用模拟实例化测试代码(使用Mockito):

//given

FileSystem fileSystemMock = mock(FileSystem.class);

InputStream streamMock = mock(InputStream.class);

given(fileSystemMock.open("file.txt")).willReturn(streamMock);

//when

//your code

//then

verify(streamMock).close();

java file 堵塞_单元测试最终在Java 6中阻塞相关推荐

  1. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  2. java foreach 原理_一不小心就让Java开发者踩坑的failfast是个什么鬼?

    1 什么是fail-fast 首先我们看下维基百科中关于fail-fast的解释: 在系统设计中,快速失效系统一种可以立即报告任何可能表明故障的情况的系统.快速失效系统通常设计用于停止正常操作,而不是 ...

  3. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  4. 支持java虚拟主机_为何缺乏支持Java的虚拟主机

    现在很多站长们,都青睐于香港虚拟主机建站.现在常见的是asp和PHP的程序空间很多,但是Java的少之又少,下面小编我给大家聊一聊! 一.香港Java虚拟主机成本高 使用Java程序建站,就必须要用支 ...

  5. java必读书籍_最佳5本Java性能调优书籍–精选,必读

    java必读书籍 为什么Java开发人员应该阅读有关性能调优的书? 当我很久以前第一次面对这个问题时,我以为以后会做,但是我很长一段时间都没有回过头来. 仅当我在用Java编写的任务关键型服务器端财务 ...

  6. java logger使用_这才是JAVA中打印日志的正确姿势

    作者:lrwin 原文链接:http://t.cn/E9BkD7a 使用slf4j 1. 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 2. 实现方式统一使用: Logback框架 打 ...

  7. java分隔符 字符串_我们如何使用Java分割带有任何空白字符作为分隔符的字符串?...

    String类的split()方法接受一个定界符(以字符串的形式),基于该定界符将当前String分成较小的字符串,并将所得的字符串作为数组返回.如果String不包含指定的定界符,则此方法返回仅包含 ...

  8. java笔试题_一道简单的 Java 笔试题,但值得很多人反思

    专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...

  9. java 7 反射_【7】java 反射详解

    [7]java 反射详解 获取Class对象的方式: 1. Class.forName("全类名"); 将字节码加载进内存,返回Class对象,多用于配置文件,将类名定义在配置文件 ...

最新文章

  1. 单臂路由实验(cisco packet tracer 5.2)
  2. Boost库实现线程池学习及线程实现的异步调用
  3. rediscluster全局数据_redis迁移,从redis cluster集群迁移数据到另外一个redis cluster集群...
  4. mysql分析sql语句性能_sql语句执行性能分析
  5. 教程-TObjectList.Clear、TStringList.Clear方法对象有没有被释放
  6. POJ 3311 Hie with the Pie(状压DP + Floyd)
  7. 帐号 快速看图cad_CAD快速看图
  8. RS485通信原理图及程序实例详解
  9. 如何在没有RTDS硬件下使用RSCAD进行仿真研究
  10. KVM虚拟化技术(理论理解以及虚拟化平台搭建步骤)
  11. Gilbreath原理中的数学与魔术(一)——Gilbreath Shuffle First Principle
  12. 苹果系统是通过服务器推送消息,客户端技术:一文带你了解iOS消息推送机制
  13. 什么是Automata(I): Web 3.0的最后一块拼图
  14. ASP.NET 班级网站-程序+配置文档
  15. 最优解问题——PuLP解决线性规划问题(一)
  16. A Swift Tour, 苹果新推出的开发语言
  17. 救救我吧,今年27岁,想转行学大数据开发
  18. Android蓝牙简介
  19. 使用HTML5自制视频控件
  20. 上海交通大学python实验七答案_20192310 实验八《数据结构与面向对象程序设计》实验报告...

热门文章

  1. SqlServer2008 安装经验日志总结
  2. html服务器框架,一种类似http/html的分布式GUI程序设计框架
  3. 自研redis sdk支持自动dns切换(附源码)
  4. MYSQL索引结构学习笔记
  5. jeecg自定义datagrid查询
  6. js随机从数组中取出几个元素
  7. 基于B/S架构的故障模型
  8. centos7 postgresql9和postgis2.1插件编译部署
  9. sql 简单加密函数
  10. centos7开启vnc服务_CentOS 7.2搭建VNC远程桌面服务的方法