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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值