2011-01-25 78 views
4

我的團隊正在使用S#arp架構框架在ASP.Net MVC 2中編寫內容管理的網站託管應用程序。我使用SpecFlow和WatiN進行集成測試,NUnit用於單元測試。如何對404進行單元測試或集成測試 - 未找到?

我有一個自定義控制器工廠,根據URL和站點在數據庫中查找頁面,然後加載適當的控制器和操作。當數據庫中沒有找到頁面(或站點)時,它還會加載錯誤控制器。

我想編寫一個單元測試或集成測試,驗證在URL無效時404頁面正確顯示。 WatiN無法檢查響應頭,因此無法準確確保加載實際的404頁面。這可能會消除集成測試的解決方案。

我是TDD和BDD的新手,所以我可能會錯過某些明顯的東西。此外,我對這個項目進行了一些改裝測試,這使得它變得更加困難。

在此先感謝。

回答

8

通常當我們編寫BDD場景時,我們從用戶的角度編寫它們。

如果用戶是普通人,他們可能並不在乎標題是否是真正的404。他們更喜歡給他們一個明確而有用的信息的頁面。編寫場景以檢查清楚且有用的消息。

Given no section on unicorns exists 
When the user browses for horses 
And changes the url to be about unicorns 
Then the user should be told that no such page exists. 

BDD是不是真的關於測試。這是關於讓你發現你沒有想到的其他事情的對話,以及對應該發生什麼的共同理解。例如,普通用戶試圖訪問管理頁面時會發生什麼?他們應該得到「訪問被拒絕」還是根本不知道該頁面在那裏?如果頁面被刪除會怎麼樣?這些討論比試圖阻止一切事情更有用。

如果您的404與特定消息關聯到用戶,那麼您可以簡單地單元測試相應的響應是否匹配。這將大大降低將來無意中將錯誤代碼與消息一起發送的可能性,並且您可以專注於真正的好處。

+0

我想我很迷惑「功能」與「規格」。該應用程序需要返回一個有效的404錯誤頁面,但正如你所說的,功能文件和相關測試可能不是測試它的適當位置。我正在查看Feature文件作爲規範列表,並且這種想法可能有缺陷。你回答了我的問題。謝謝! – Eddie 2011-01-25 18:15:15

相關問題