java file 堵塞_单元测试最终在Java 6中阻塞
首先考慮使用
IOUtils.closeQuietly(),它會(huì)將未經(jīng)測(cè)試的代碼(可能是重復(fù)代碼)減少為:
try {
f = new BufferedInputStream(new FileInputStream(source));
f.read(buffer);
} finally {
IoUtils.closeQuietly(f);
}
現(xiàn)在變得艱難. “正確”的方法是將BufferedInputStream的創(chuàng)建外部化到另一個(gè)類(lèi)中并注入mock.有了一個(gè)模擬,你可以驗(yàn)證是否調(diào)用了適當(dāng)?shù)腸lose()方法.
@ JeffFoster的答案非常接近我的意思,但是我會(huì)推薦組合而不是繼承(以更多的代碼為代價(jià)):
try {
f = fileSystem.open(source);
f.read(buffer);
} finally {
IoUtils.closeQuietly(f);
}
其中fileSystem是FileSystem接口的一個(gè)實(shí)例,其中簡(jiǎn)單的實(shí)際實(shí)現(xiàn)在生產(chǎn)代碼中注入或模擬用于測(cè)試.
interface FileSystem {
InputStream open(String file);
}
外部化文件打開(kāi)的另一個(gè)好處是,如果您決定刪除緩沖或添加加密,則只需要修改一個(gè)位置.
使用該接口,您可以使用模擬實(shí)例化測(cè)試代碼(使用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();
總結(jié)
以上是生活随笔為你收集整理的java file 堵塞_单元测试最终在Java 6中阻塞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue导出Excel图片
- 下一篇: java小白会有那些工作_Java小白找