2013-07-02 36 views
1

我有一个InputStream捕获的单元测试。例如:EasyMock:我应该关闭捕获的InputStream吗?

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

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

谢谢。

回答

0

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

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

我猜你有以下调用层次:

在junittest

  • 呼叫businesscode

在businesscode测试

  • 开放流
  • 通话方法(的inputStream)

中的拍摄对象物junitcode从捕获

  • 获取价值
  • 断言东西

早在businesscode内的最后

  • 关闭流

junitcode

  • 测试

流的方式关闭

的结束,你应该如果你试图关闭它更然后得到一个IOException内的已经关闭的消息一次,所以你可以尝试两种方式,对吧?

+0

谢谢你的回答!很明显。 这很奇怪,但不止一次关闭流之后没有任何异常。所以我不能用这种方法检查它是否已经关闭。 – yaskovdev

0

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