java file 堵塞_单元测试最终在Java 6中阻塞
首先考虑使用
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中阻塞相关推荐
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
- java foreach 原理_一不小心就让Java开发者踩坑的failfast是个什么鬼?
1 什么是fail-fast 首先我们看下维基百科中关于fail-fast的解释: 在系统设计中,快速失效系统一种可以立即报告任何可能表明故障的情况的系统.快速失效系统通常设计用于停止正常操作,而不是 ...
- java 判断类型_如何快速入门Java编程学习(干货)
一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...
- 支持java虚拟主机_为何缺乏支持Java的虚拟主机
现在很多站长们,都青睐于香港虚拟主机建站.现在常见的是asp和PHP的程序空间很多,但是Java的少之又少,下面小编我给大家聊一聊! 一.香港Java虚拟主机成本高 使用Java程序建站,就必须要用支 ...
- java必读书籍_最佳5本Java性能调优书籍–精选,必读
java必读书籍 为什么Java开发人员应该阅读有关性能调优的书? 当我很久以前第一次面对这个问题时,我以为以后会做,但是我很长一段时间都没有回过头来. 仅当我在用Java编写的任务关键型服务器端财务 ...
- java logger使用_这才是JAVA中打印日志的正确姿势
作者:lrwin 原文链接:http://t.cn/E9BkD7a 使用slf4j 1. 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 2. 实现方式统一使用: Logback框架 打 ...
- java分隔符 字符串_我们如何使用Java分割带有任何空白字符作为分隔符的字符串?...
String类的split()方法接受一个定界符(以字符串的形式),基于该定界符将当前String分成较小的字符串,并将所得的字符串作为数组返回.如果String不包含指定的定界符,则此方法返回仅包含 ...
- java笔试题_一道简单的 Java 笔试题,但值得很多人反思
专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...
- java 7 反射_【7】java 反射详解
[7]java 反射详解 获取Class对象的方式: 1. Class.forName("全类名"); 将字节码加载进内存,返回Class对象,多用于配置文件,将类名定义在配置文件 ...
最新文章
- 单臂路由实验(cisco packet tracer 5.2)
- Boost库实现线程池学习及线程实现的异步调用
- rediscluster全局数据_redis迁移,从redis cluster集群迁移数据到另外一个redis cluster集群...
- mysql分析sql语句性能_sql语句执行性能分析
- 教程-TObjectList.Clear、TStringList.Clear方法对象有没有被释放
- POJ 3311 Hie with the Pie(状压DP + Floyd)
- 帐号 快速看图cad_CAD快速看图
- RS485通信原理图及程序实例详解
- 如何在没有RTDS硬件下使用RSCAD进行仿真研究
- KVM虚拟化技术(理论理解以及虚拟化平台搭建步骤)
- Gilbreath原理中的数学与魔术(一)——Gilbreath Shuffle First Principle
- 苹果系统是通过服务器推送消息,客户端技术:一文带你了解iOS消息推送机制
- 什么是Automata(I): Web 3.0的最后一块拼图
- ASP.NET 班级网站-程序+配置文档
- 最优解问题——PuLP解决线性规划问题(一)
- A Swift Tour, 苹果新推出的开发语言
- 救救我吧,今年27岁,想转行学大数据开发
- Android蓝牙简介
- 使用HTML5自制视频控件
- 上海交通大学python实验七答案_20192310 实验八《数据结构与面向对象程序设计》实验报告...