EasyMock:我应该关闭捕获的InputStream吗?

时间:2013-07-02 13:52:47

标签: java unit-testing capture easymock

我有一个带有InputStream捕获的单元测试。像这样:

Capture<InputStream> capturedArgument = new Capture<InputStream>();
// some expectations and the tested method execution here
InputStream actualStream = capturedArgument.getValue();
// some assertions here

在测试对象中关闭实际流(在测试中捕获)。 我应该在单元测试中断言后手动关闭actualStream吗?或者它会在实际流关闭后关闭?

谢谢。

2 个答案:

答案 0 :(得分:0)

它最终将自己关闭,大多数finalize方法毕竟调用close方法。仍然可能最好手动完成,因为没有保证垃圾收集器何时调用finalize。

答案 1 :(得分:0)

它总是一个很好的决定来关闭资源,让它们可用于其他线程并避免泄漏但是这是一个测试,并且jvm将在测试之后关闭,所以它完成了你可以保留原样保持测试非常小。

在这种情况下,特别是它已经关闭,因为你提到将在应用程序本身中调用close方法。因此捕获中的Stream也会关闭。

我猜您有以下呼叫层次结构:

在junittest中

  • 致电业务代码

在businesscode中进行测试

  • open stream
  • call method(inputStream)

捕获对象中的junitcode

  • 从捕获中获取价值
  • 断言

返回商业代码

  • 最终
  • 中的关闭流

junitcode

  • 测试结束

流已关闭

顺便说一下,如果你尝试多次关闭它,你应该在IOException中得到一条已经封闭的消息,这样你就可以尝试两种方式,对吗?