2008-12-11 15 views
1

我正在編寫一些Java代碼,它使用FileReader從幾個輸入文件加載數據。我使用的TDD相當繁重,我想添加一些測試,通過在讀取器中調用close()函數來確保正確清理。不幸的是,我無法想出一個測試這個的好方法。任何人有任何見解?從JUnit測試確認FileReader已正確關閉

編輯添加:我知道我可以使用模擬對象明確地測試關閉調用,但我希望儘可能避免它,部分原因是我發現它們導致有些brittler代碼,部分原因是我好奇是否可以編寫代碼來識別不關閉文件的效果)

回答

1

如果您可以將FileReader對象傳遞給調用,那麼您可以提供一個自定義FileReader,它具有重寫的close方法 - in你有一個布爾變量,檢查是否關閉。然後,您可以將其用於您的單元測試。

6

我認爲這樣做的方法是將FileReader或創建FileReader的Factory注入到類中。然後在你的單元測試中,你可以注入一個模擬版本的FileReader並檢查它的正確方法已被調用。您可能想要查看JMock以創建模擬FileReader並設置close方法調用的期望值。

+0

我真的想知道是否有辦法做到這一點沒有嘲笑,但我仍然upvoted這是一般好的建議。 – 2008-12-11 03:50:55

3

應該工作的一種方法是在關閉應該拋出異常的FileReader後測試ready()方法。例如:

FileReader fr = new FileReader("somefile"); 
// ... file reader activity 
fr.close(); 

// After closing the reader, the ready() method should cause an IOException: 
boolean isOpen = true; 
try { 
    isOpen = fr.ready(); 
} catch (IOException e) { 
    isOpen = false; 
} 
assertFalse("FileReader is still open", isOpen);