2010-05-17 108 views
5

我有一個會計&薪資客戶端/服務器應用程序,其中有幾個輸入表單與複雜的數據驗證規則。我正在尋找一種執行用戶界面單元測試的有效方法。單元測試用戶界面。什麼是有效的方法?

對於複雜的驗證規則,我的意思是:

  • 「禁用按鈕X,如果我插入文本框Y上值」
  • 「啓用組合框,如果我在一個文本框插入值」 ... ... ......

我發現最有前途的模式是由M.福勒(http://martinfowler.com/eaaDev/ModelViewPresenter.html)建議。

您是否有任何關於用戶界面單元測試的經驗?作爲我使用的技術堆棧:.NET 3.5 & Windows窗體小部件庫。

回答

5

我不會稱之爲「單元測試」,但我在運行WinForms UI自動化測試以及使用WatiN的Web UI中取得了一定程度的成功。

假設您可以獲取要測試的應用程序窗口的句柄,您應該能夠編寫大量C#代碼來測試用戶界面的功能。

很多人譴責嘗試對用戶界面運行自動化測試的想法,因爲存在太多以至於無法以這種方式進行測試。例如,沒有自動化測試會注意到字體很難看,或者某些文字很混亂,或者按鈕稍微偏離中心。毫無疑問,對於這些類型的東西,你絕對需要一個聰明的人在看屏幕。

但是,除了那種類型的測試之外,肯定會有大量重複性測試可以自動化並定期執行。大多數大型應用程序都有一整套迴歸測試腳本,必須在新版本發佈時手動執行。這些測試通常是你可以訓練猴子做的事情,只是點擊這個鏈接的指令列表,輸入一些文本,點擊這個按鈕,檢查產生的信息等等。這些東西對於質量保證測試人員來說是浪費時間,而且使他們感到痛苦,所以如果他們能夠自動化,很好。這些類型的測試應該能夠由您的構建服務器每天自動運行,並且可以製作得比任何手動測試都要透徹得多。

再一次,它不會發現奇怪的未知事物,但它會給你一定程度的自信,認爲你的小改變並沒有打破你在應用程序另一端從未聽說過的其他屏幕。當然,這會導致開發人員進行更多的工作,因爲應用程序的小改動可能會因爲愚蠢的原因而中斷測試,就像任何自動化測試一樣,但它會爲您節省大量時間進行測試和調試。這對你來說是否值得你去決定,但我認爲這是一個不應該像你平常看到的那樣快速被解僱的考慮。

+0

同意您的考慮。我認爲有一些測試總比沒有好。所以我想找到一種快速編寫批處理的方法,當有人執行小的更改時,這可以讓我提高可信度。 – pierocampanelli 2010-05-17 16:46:37

1

根據定義,單元測試對於測試接口並不是那麼好。單元測試應測試單個實體的後端功能。對於功能測試,請爲此獲取框架。考慮Mercury(現爲HP)Quality Center或Performance Center等產品。如果你有預算,試試Selenium。

功能測試是單元測試的一個步驟,不應與彼此混淆。

3

用戶界面測試很難,通常最好在比單元測試更高的測試水平上完成。

Martin Fowler提出的使用MVC/MVP分離的測試控制器和邏輯是一個很好的開始,但是您經常需要使用WinRunner或QTP等自動化工具對其進行擴展,以便以自動方式全面測試UI。

+0

是否還存在任何開源工具呢? – pierocampanelli 2010-05-17 19:35:39

1

對於複雜的驗證規則,我的意思是:

* "Disable button X if I Insert a value in textfield Y" 

這些規則同時測試模型和視圖,這是什麼讓他們艱難。相反,驗證當您在文本字段Y中插入值時,模型會獲取該值;具有空Y的模型具有X_ENABLED == false,並且非空Y具有X_ENABLED == true;並且,給定一個X_ENABLED == true的模型,View的按鈕被啓用。這些測試中只有兩個涉及UI,它們應該非常簡單,幾乎不會失敗。將複雜的邏輯放入容易測試的模型中。

0

正如其他人所說的那樣,對UI進行Untit測試是一種痛苦。我只想補充一點,Team Foundation 2010的新功能Test & Lab Manager是對UI進行手動測試和自動執行後續測試的好方法。在運行測試時足夠聰明,至少在WinForms,WPF和網站上可以識別GUI結構。

相關問題