NUnitForms 測試GUI應用程式的優秀工具

2022-01-11 02:08:28 字數 2778 閱讀 8772

著名的nunit是單元測試的優秀工具,但是要在乙個測試方法中啟動gui程式,比如windows form介面,這比較難做到。nunitforms就是為解決這個問題產生的,它是nunit的乙個擴充套件程式,可用於測試windows forms 型別的程式。

在vs2010中新增乙個測試專案,新增對兩個程式集nunit.framework和nunit.nunitforms引用,新增新測試型別:

using nunit.framework;

using nunit.extensions.forms;

…namespace yourtestsuitenamespace

如果要顯示guid,則測試型別應該繼承於nunitformtest, 新增testfixture特性,再新增乙個test方法:

[test]

pubilc void showdilalogtest()

啟動gui介面

如果您的visual studio已經安裝了resharper外掛程式,則可以直接點選被測試方法的簽名地方,選擇除錯或是執行測試,上面的測試方面會顯示乙個gui介面,關閉窗體,測試完成。

也可以用窗體例項的showdialog 方法調出介面,顯示為個model對話方塊。

引用控制項

如果要引用被測試窗體中的控制項,命名空間nunitforms 中有一些以tester型別結尾的型別可供使用。這些型別繼承於controltester ,可以用controltester 來測試控制項,也可以用它的派生型別。

以controltester類來測試任何控制項,可以像這樣通過屬性的索引來訪問它的屬性.

controltester textbox = new controltester("nameofsometextbox");

assertion.assertequals("defaulttext", textbox["text"]);

textbox["text"] = "newtext";

嘗試使用fireevent方法來觸發控制項的乙個事件:

controltester button = new controltester("nameofsomebutton");

button.fireevent("click");

比如,為了引用窗體myformname型別中的button1的按鈕,可以下面的方法引用此控制項:

buttontester buttontester = new buttontester("button1", "myformname");

如果你省略了"formname"引數, nunitforms將在所有開啟的form中查詢控制項。

checkboxtester uncheckboxtester = new checkboxtester( "apanelname.checkboxname", "myformname");
radiobuttontester radiotester = new radiobuttontester("mainformcontrolname.panelname.radiobuttonname",  "myformname");
如果nunitforms找不到你的控制項, 會丟擲乙個nosuchcontrolexception異常. 如果控制項的名稱沒有資格使它成為乙個唯一命名的控制項, 將會被丟擲ambiguousnameexception異常.

對於層層巢狀控制項的命名,請參考下面的例子

控制項的命名

nunitforms通過控制項的name屬性來查詢你要測試的控制項. 如果在乙個form中有多個相同名稱的控制項, 那麼他們必須像下面這樣進行限定:

form

panela

usercontrol1

button           (panela.usercontrol1.button)  

usercontrol2

button           (usercontrol2.button)

panelb

usercontrol1

button           (panelb.usercontrol1.button)

model/modeless dialog 模式窗體/非模式窗體

當測試窗體時,如果這個窗體要調出子窗體或是調出對話方塊,這時需要把窗體的測試邏輯放到乙個public void簽名的方法中,並用exprectmodel指定方法名稱:

[test]

public

void testokbuttontest()

測試時,如果要調出message box,請參考下面的寫法

expectmodal("messageboxcaption", "messageboxclickermethod");
多執行緒測試

如果運用到多執行緒測試窗體,應該像下面的例子一樣,註冊乙個委託型別,把測試**放到該方法中

public

void genericformhandler()

…[test]

public

void mainformtest()

public

void mainformtestlogic (object sender, eventargs e)

單元測試的目的是改善**

既然可以調出窗體,就可以測試自定義控制項,這是一種測試自定義控制項的好方法。

測試專案與resharper配合起來,很容易啟動,除錯,修改,這樣做單元測試,才是有益於改善**的測試。

GUI測試總結 一

gui,graphical user inte ce的縮寫,通常發音為goo ee。眾所周之,gui就是使用影象,輸入的文字,帶圖示的螢幕的計算機介面,取而代之許多鍵盤的功能。gui讓使用者可以通過圖示和滑鼠與他們的電腦進行互動,而不是在命令列中輸入文字。第乙個圖形使用者介面是由xerox palo...

python的GUI測試工具 autoItX

python的gui測試工具 autoitx autoitx是autoit v3的dll 版本.它提供autoit的子集,使用activex com 和dll介面.意 思就是你可以新增類autoit的特片到你喜歡的指令碼語言和程式語言當中.像vb,vc,c c,delphi,vbscript等支援d...

如何提高GUI測試穩定性

我們經常在執行gui自動化測試時,遇到測試用例穩定性的問題,比如,同樣的測試用例再同樣的環境上,時而測試通過,時而測試失敗。經常在維護測試用例或者查詢測試用例失敗原因上花費很多時間。5種常見的造成gui測試不穩定的原因 非預計的彈框 一種情況是我們在執行用例的過程中,作業系統彈出的對話方塊,例如 系...