我有一个带有InputStream捕获的单元测试。像这样:
Capture<InputStream> capturedArgument = new Capture<InputStream>();
// some expectations and the tested method execution here
InputStream actualStream = capturedArgument.getValue();
// some assertions here
在测试对象中关闭实际流(在测试中捕获)。 我应该在单元测试中断言后手动关闭actualStream吗?或者它会在实际流关闭后关闭?
谢谢。
答案 0 :(得分:0)
它最终将自己关闭,大多数finalize方法毕竟调用close方法。仍然可能最好手动完成,因为没有保证垃圾收集器何时调用finalize。
答案 1 :(得分:0)
它总是一个很好的决定来关闭资源,让它们可用于其他线程并避免泄漏但是这是一个测试,并且jvm将在测试之后关闭,所以它完成了你可以保留原样保持测试非常小。
在这种情况下,特别是它已经关闭,因为你提到将在应用程序本身中调用close方法。因此捕获中的Stream也会关闭。
我猜您有以下呼叫层次结构:
在junittest中
在businesscode中进行测试
捕获对象中的junitcode
返回商业代码
junitcode
流已关闭
顺便说一下,如果你尝试多次关闭它,你应该在IOException中得到一条已经封闭的消息,这样你就可以尝试两种方式,对吗?