NUnitForms測試GUI應(yīng)用程序的工具
對于層層嵌套控件的命名,請參考下面的例子
控件的命名 NUnitForms通過控件的Name屬性來查找你要測試的控件. 如果在一個form中有多個相同名稱的控件, 那么他們必須像下面這樣進(jìn)行限定:
Form PanelA UserControl1 Button (PanelA.UserControl1.Button) UserControl2 Button (UserControl2.Button) PanelB UserControl1 Button (PanelB.UserControl1.Button)
Model/Modeless Dialog 模式窗體/非模式窗體
當(dāng)測試窗體時,如果這個窗體要調(diào)出子窗體或是調(diào)出對話框,這時需要把窗體的測試邏輯放到一個public void簽名的方法中,并用ExprectModel指定方法名稱:
[Test]
public void TestOKButtonTest()
{
ExpectModal("FormName", "formNameHandler");
FormName form = new FormName();
form.ShowDialog();
…
public void formNameHandler ()
{
ButtonTester buttonTester = new ButtonTester("okButton", " FormName");
// Check the OK button's text and then click it
Assert.AreEqual("OK", buttonTester.Text, "FormName’s OK button text is wrong '" + buttonTester.Text + "'");
buttonTester.Click();
}
測試時,如果要調(diào)出message box,請參考下面的寫法
ExpectModal("messageBoxCaption", "messageBoxClickerMethod");
多線程測試
如果運(yùn)用到多線程測試窗體,應(yīng)該像下面的例子一樣,注冊一個委托類型,把測試代碼放到該方法中
public void genericFormHandler()
{
// Do nothing in this method!
}
…
[Test]
public void MainFormTest()
{
…
MainGUIForm mainForm = new MainGUIForm();
mainForm.OnFormReady += new EventHandler<EventArgs> (mainFormTestLogic);
ExpectModal("MainGUIForm", "genericFormHandler");
mainForm.ShowDialog();
…
}
public void mainFormTestLogic (object sender, EventArgs e)
目前可以下載到的版本是NUnitFormsV2.0.0.5 alpha4。
單元測試的目的是改善代碼
既然可以調(diào)出窗體,可以測試自定義控件,這是一種測試自定義控件的好方法。
測試項(xiàng)目與Resharper配合起來,很容易啟動,調(diào)試,修改,這樣做單元測試,才是有益于改善代碼的測試。