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

Java EasyMock:我应该关闭捕获的InputStream吗?,java,unit-testing,capture,easymock,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

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

Capture<InputStream> capturedArgument = new Capture<InputStream>();
// some expectations and the tested method execution here
InputStream actualStream = capturedArgument.getValue();
// some assertions here
Capture capturedArgument=new Capture();
//这里有一些期望和经过测试的方法执行
InputStream actualStream=capturedArgument.getValue();
//这里有一些断言
实际流(在测试中捕获)在测试对象中关闭。 我应该在单元测试中的断言之后手动关闭actualStream吗?或者在实际关闭流之后也会关闭


谢谢。

它最终会自动关闭,毕竟大多数finalize方法都会调用close方法。尽管如此,可能还是最好手动执行,因为无法保证垃圾收集器何时调用finalize。

关闭资源、使资源可用于其他线程并避免泄漏始终是一个好的决定,但这是一个测试,jvm将在测试结束后关闭,因此它已经完成,您可以保持原样,以保持测试非常小

特别是在本例中,它已经关闭,因为您提到close方法将在应用程序本身中调用。因此,捕获中的流也被关闭

我猜您具有以下调用层次结构:

在朱尼特

  • 呼叫业务代码
在businesscode中进行测试

  • 明流
  • 调用方法(inputStream)
捕获对象中的junitcode

  • 从捕获中获取价值
  • 断言某事
回到商业代码

  • 在一个最后的时间内关闭流
杜松子代码

  • 测试结束
溪流已关闭


顺便说一句,如果您尝试多次关闭IOException,您应该会在IOException中收到一条已关闭的消息,这样您就可以两种方式都尝试,对吗?

谢谢您的回答!这是清楚的。这很奇怪,但在多次关闭流之后,没有任何例外。因此,我无法检查它是否已经以这种方式关闭。