2014-02-28 183 views
0

假設我想測試下載錯誤(例如,服務器關閉或憑據無效)的某些從存儲服務器下載文件的代碼遵循特定的操作過程, 。測試和例外,嘲笑

我看到兩種方法來測試:

選擇#1:初始化明顯不良憑證的真實下載服務器對象;當某些事情試圖用conn做某事時它會觸發一個異常;

FileServerConnection conn = new FileServerConnection("Invalid User", "Invalid Password"); 

選擇#2:嘲笑FileServerConnection類並指示模擬扔當FileServerConnection對象被構造異常;

我知道Choice#2優於Choice#1,但我不明白爲什麼..有人可以解釋爲什麼#2比#1好。我現在看到的第一個問題(星期五下午)唯一的問題是這是一個慢得多的測試(雖然慢了一兩秒)。

乾杯!的選擇#1

PS一個優點是,它是較少的代碼行寫:-)

+2

選擇1不是一個單元測試,它是一個集成測試。 – Aurand

+0

真正的選擇#1是一個集成測試,但從未說過它是我原始文章中的單元測試;然後問題就變成了:爲什麼在這種情況下單元測試而不是集成測試,因爲集成測試實際上是少量代碼編寫的; – MadSeb

+0

@MadSeb - 你的標題字面上說單元測試... –

回答

2

的問題是,選擇#1依賴另一個系統上,您通常希望你的單元測試是獨立的像這樣的東西。

您在#2選擇中的測試正在測試您的代碼在壞憑證(您想要的)下的行爲方式,但選擇#1會導致測試下載服務器如何處理不當憑據(這與您的想在這裏測試)。這使得你的測試更加複雜,更多的事情可能會出錯。