2013-07-02 41 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時沒有保證。