我是C#的新手,并试图用NUnit和NUnitForms编写一个简单的GUI单元测试。我想测试按钮上的单击是否打开新表单。 我的应用程序有两种形式,主窗体(Form1)和一个打开新窗体的按钮(密码):
private void button2_Click(object sender, EventArgs e)
{
Password pw = new Password();
pw.Show();
}
我的测试的来源如下:
using NUnit.Framework;
using NUnit.Extensions.Forms;
namespace Foobar
{
[TestFixture]
public class Form1Test : NUnitFormTest
{
[Test]
public void TestNewForm()
{
Form1 f1 = new Form1();
f1.Show();
ExpectModal("Enter Password", "CloseDialog");
// Check if Button has the right Text
ButtonTester bt = new ButtonTester("button2", f1);
Assert.AreEqual("Load Game", bt.Text);
bt.Click();
}
public void CloseDialog()
{
ButtonTester btnClose = new ButtonTester("button2");
btnClose.Click();
}
}
}
NUnit输出为:
NUnit.Extensions.Forms.FormsTestAssertionException : expected 1 invocations of modal, but was invoked 0 times (Form Caption = Enter Password)
按钮文字检查成功。问题是 ExpectModal 方法。我也用Form的名字尝试过,但没有成功。
有谁知道可能出错了什么?
答案 0 :(得分:2)
我自己想通了。可以通过两种方式显示Windows窗体:
使用Show()方法打开无模式Windows,使用ShowDialog()打开模态窗口。 NUnitForms只能跟踪模态对话(这也是该方法命名为'ExpectModal'的原因)。
我在源代码中将每个“Show()”更改为“ShowDialog()”,NUnitForms工作正常。
答案 1 :(得分:0)
如果您希望将表单实际打开为Modal对话框,我只会更改您的源代码以使用ShowDialog()。
你是正确的,因为NUnitForms支持“Expect Modal”,但没有“Expect Non-Modal”。您可以使用FormTester类相对轻松地自行实现。 FormTester是可从NUnitForms的最新存储库获得的扩展类。您传入要检查的表单的.Name属性的字符串,以查看它是否显示。
public static bool IsFormVisible(string formName)
{
var tester = new FormTester(formName);
var form = (Form) tester.TheObject;
return form.Visible;
}