2008-08-20 109 views
26

單元測試和ASP.NET Web應用程序在我的組中是一個模棱兩可的問題。通常情況下,良好的測試實踐通過裂縫和網絡應用程序最終會在沒有測試的情況下進行數年。集成TDD和Web應用程序開發的最佳實踐?

這個痛點的原因通常圍繞編寫UI自動化中期開發的麻煩。

您或您的組織如何將最佳的TDD實踐與Web應用程序開發結合起來?

回答

18

單元測試將是可以實現的,如果你適當分離圖層。正如Rob Cooper所暗示的,不要在您的WebForm中使用邏輯以外的任何邏輯來管理演示文稿。所有其他的邏輯和持久層應該保存在不同的類中,然後你可以單獨測試它們。

測試GUI有些人喜歡selenium。其他人抱怨說,這是一個痛苦的建立。

+1

好,也許硒對一些疼痛設置..但是這就是爲什麼別人有工作:) – kiedysktos 2015-07-13 12:45:43

4

我將應用程序分層並且至少從演示者/控制器(取決於您的偏好,mvc/mvp)對數據層進行單元測試。這樣,我對大部分編寫的代碼都有很好的測試覆蓋率。

我已經看過FitNesse,Watin和Selenium作爲自動化UI測試的選項,但是我還沒有在任何項目上使用這些選項,所以我們堅持使用人體測試。 FitNesse是我所傾向的那個,但我不能介紹這個以及引入TDD(這是否使我變得糟糕?我希望不會!)。

2

這是一個很好的問題,一個我會訂閱太:)

我還是比較新的Web開發,我也期待在大量的代碼,大部分都未經檢驗。

對我來說,我保持UI 儘可能輕,(通常只有幾行代碼),並測試一切其他的東西。至少我可以有一些信心,讓它在用戶界面上的一切都是正確的。

完美嗎?也許沒有,但至少它還是相當高度自動化和核心代碼(其中大部分的「神奇」的情況),仍具有相當不錯的覆蓋..

2

通常的做法是將您可以從代碼隱藏中移出的所有代碼移動到可以獨立測試的對象中。這樣的代碼通常會遵循MVP或MVC設計模式。如果你在「Rhino Igloo」上搜索,你可能會找到它的Subversion版本庫的鏈接。該代碼值得研究,因爲它展示了我所見過的Web窗體上最好的MVP實現之一。

你的代碼隱藏意志,下面這個模式的時候,做兩件事情:

  1. 交通所有用戶操作來演示。
  2. 呈現演示者提供的數據。

單元測試演示者應該是微不足道的。

更新:犀牛冰屋可以在這裏找到:https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/

0

已經有嘗試上獲得微軟的免費UI自動化(包含在.NET框架3.0)與Web應用程序(ASP.NET)一起工作。一家名爲Artiso的德國公司恰好寫了一篇博客文章,解釋如何實現該目標(link)。

但是,他們的博文還鏈接了一個MSDN網絡廣播,它解釋了UI自動化框架和winforms,在我看了這個之後,我注意到您需要AutomationId來獲取對控件的引用。但是,在Web應用程序中,控件沒有AutomationId。

我問Thomas Schissler(Artiso)這件事,他解釋說這是InternetExplorer的一個主要缺點。他引用了微軟的老技術(MSAA),並希望IE8能夠做得更好。

但是,我也給了Watin一個嘗試,它似乎工作得很好。我甚至喜歡Wax,它允許通過Microsoft Excel工作表實現簡單的測試用例。

0

Ivonna可以單元測試您的意見。我仍然建議將大部分代碼移到其他部分。但是,其中的一些代碼就屬於,就像對控件或控件事件處理程序的引用一樣。

2

我通常會避免涉及依賴UI元素的測試。我喜歡集成測試,它測試從數據庫層到視圖層(但不是實際佈局)的所有內容。

嘗試啓動一個測試套件之前在新項目中編寫一行實際代碼,因爲以後編寫測試會更困難。

仔細選擇你測試的東西 - 不要盲目地爲所有東西寫測試。有時這是一個無聊的任務,所以不要讓它更難。如果您編寫的測試過多,那麼您有可能在費時的維護工作的壓力下放棄這項任務。

嘗試將盡可能多的功能捆綁到單個測試中。這樣,如果出現問題,錯誤將會傳播。例如,如果您有一個生成摘要的類 - 請測試實際的輸出,而不是每個輔助函數。

不要相信自己。假設你總會犯錯誤,所以你寫測試讓你的生活變得更輕鬆,而不是更難。

如果你是不是感覺良好的寫作測試,你可能就錯了;)