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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jna调用dll文件_关于java jna调用dll的问题

public interface User32 extends StdCallLibrary{User32 INSTANCE (User32)Native.loadLibrary("User32",User32.class);//加载系统User32 DLL文件,也可以是C写的DLL文件int SendMessageA(int hwnd,int msg,int wparam,int lparam);int FindWindowA(Str…

【bzoj4444】[Scoi2015]国旗计划 倍增

题目描述 给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈?输入 第1行,包含2个正整数N,M,分别表示边防…

java multimap 序列化_C++ JSON库的使用

1. 如何使用?2. 常用方法2.1 创建json对象2.1.1 使用cin,cout输入输出流2.1.2 提供根据键直接生成键值对的方法2.1.3 json::array json::object2.1.4 几个区别2.2 序列化2.2.1 标准输出自动序列化2.2.2 使用dump()函数2.3 反序列化2.3.1 从标准输入反序列化2.3.2 通…

【Excle数据透透视表】如何删除数据透视表

选中区域A4:C17,在键盘上按DELETE键删除,结果提示:那么如何删除呢?解决方案选中整个数透视表,再删除具体操作:选中整个数据透视表→DELETE注意:删除之后,源数据不会受到影响转载于:https://www.…

java 启动redis服务器_docker启动redis并使用java连接

一、先查找镜像docker search redis二、拉取镜像docker pull redis三、等待拉取完毕四、查看拉去的镜像docker iamges五、运行redis连接1:https://blog.csdn.net/weixin_38956287/article/details/80423607连接2:http://www.runoob.com/docker/docker-in…

【算法学习】整体二分

我们开门见山,讲讲一道sb题: 给你一个数组,查这个数组的第x大元素。 排序?可以 二分?怎么做啊? 二分出一个mid,判断这个数组中有多少个数小于等于mid,如果个数大于等于x,…

mysql leave的作用_MySQL数据库中DELIMITER的作用

以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获。下面是一个存储过程的实例:DELIMITER $$USE …

Fullpage参数说明

参数说明 $(document).ready(function() {$(#fullpage).fullpage({//Navigationmenu: false,//绑定菜单,设定的相关属性与anchors的值对应后,菜单可以控制滚动,默认为false。anchors:[firstPage, secondPage],//anchors定义锚链接&#xff0c…

mysql100个优化技巧_完整篇:100+个MySQL调试和优化技巧(2)

▼MySQL模式优化51.检查和经常优化表.52. 经常重写InnoDB表优化.53. 有时,当添加列时删除索引,然后在添加回来索引,这样就会更快.54. 针对不同的需求,使用不同的存储引擎.55. 使用归档存储引擎日志表或审计表-这是更有效地写道.56…

Java Swing

编辑中... 转载于:https://www.cnblogs.com/startup-try/p/8040625.html

包装类java_Java 包装类

也叫过滤流类处理刘类没有对应到任何具体的流设备,需要给它传递一个对应的具体流设备的输出/输入流对象I/0内存缓冲BufferedInputStream,BufferedOutputStream 缓冲区包装类 默认32个字节缓冲区的缓冲流内存/磁盘扇区一次读写操作所能完成最大字节数的整数倍(4的整数…

简单的SQL注入学习

引贴: http://blog.163.com/lucia_gagaga/blog/static/26476801920168184648754/ 首先需要编写一个php页面,讲php页面放入/opt/lampp/htdocs目录下: 解释一下这个页面: 1.通过if语句判断变量是否初始化 2.if语句中通过mysql_conne…

vb红绿灯自动切换_VB红绿灯程序

《VB红绿灯程序》由会员分享,可在线阅读,更多相关《VB红绿灯程序(4页珍藏版)》请在人人文库网上搜索。1、VB红绿灯演示Private Sub Command1_Click()While (1)Shape1.FillColor RGB(255, 0, 0)Shape2.FillColor RGB(0, 0, 0)Shape3.FillColor RGB(0, …

什么是网站监控?

网站监控是跟踪网站的可用性和性能,以最小化宕机时间,优化性能并确保顺畅的用户体验。维护网站正常运行对于任何企业来说都是至关重要的,因而对大多数业务来说,网站应用监控都是一个严峻的挑战。Applications Manager网站应用监控…

循序渐进PYTHON3(十三) --4-- DJANGO之CSRF使用

用 django 有多久,跟 csrf 这个概念打交道就有久。 每次初始化一个项目时都能看到 django.middleware.csrf.CsrfViewMiddleware 这个中间件每次在模板里写 form 时都知道要加一个 {% csrf_token %} tag每次发 ajax POST 请求,都需要加一个 X_CSRFTOKEN 的…

java string replace 重载_关于Java:如何使用replace(char,char)替换字符b的所有实例为空...

如何使用replace(char,char)将字符" b"的所有实例全部替换为空。例如:Hambbburger to Hamurger编辑:有一个约束,我只能使用1.4.2,这意味着没有重载版本的replace!你不能因为什么都不是字符&#…

JavaScript——执行环境、变量对象、作用域链

前言 这几天在看《javascript高级程序设计》,看到执行环境和作用域链的时候,就有些模糊了。书中还是讲的不够具体。通过上网查资料,特来总结,以备回顾和修正。 目录: EC(执行环境或者执行上下文,Execution …

java线程interrupt用法_Java 如何中断线程

本篇文章帮大家学习java 如何中断线程,包含了Java 如何中断线程使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。以下实例演示了如何使用interrupt()方法来中断线程并使用 isInterrupted() 方法来判断线程是否已…

laravel5.4之artisan使用总结一

Artisan是laravel自带的命令行接口: php artisan list 编写命令 生成命令: 可以使用Artisan命令,php artisan make:command ConsoleTest 执行完这个命令后,会在app/Console/Commands 目录下创建ConsoleTest命令类。会包含默认的属…

java如何保证类不被回收_垃圾回收机制保证了Java程序不会出现内存溢出。( )

【简答题】1.激素(名词解释)【单选题】6.下列哪种情况下可引起ADH分泌增加【判断题】在Java中使用String类型的实例对象表示一个字符串。( )【判断题】static关键字可以修饰成员变量,也可以修饰局部变量。( )【单选题】建设项目投资控制应贯穿于建设工程全过程,在建设项目实施阶…