如何测试按钮单击是否打开带有NUnitForms的新表单?

时间:2009-06-18 15:59:50

标签: c# unit-testing nunit

我是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的名字尝试过,但没有成功。

有谁知道可能出错了什么?

2 个答案:

答案 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;
    }