我是C#的新手,正在尝试使用NUnit和NUnitForms写一个简单的GUI单元测试。我想测试单击按钮是否会打开一个新表单。
我的应用程序有两种形式,主形式(Form1)和一个用于打开新形式(Password)的按钮:

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的名称,但是没有成功。

有谁知道可能出什么问题了?

最佳答案

我自己弄清楚了。有两种显示Windows窗体的方法:


模态:“模态表单或对话框必须关闭或隐藏,然后才能继续使用应用程序的其余部分”
无模式:“ ...让您可以在窗体和另一窗体之间转移焦点,而不必关闭初始窗体。显示窗体时,用户可以继续在任何应用程序中的其他地方工作。”


使用Show()方法打开无模式Windows,使用ShowDialog()打开模态Windows。 NUnitForms只能跟踪“模态对话框”(这也是将方法命名为“ ExpectModal”的原因)。

我在源代码中将每个“ Show()”更改为“ ShowDialog()”,NUnitForms正常运行。

关于c# - 如何测试按钮单击是否可以使用NUnitForms打开一个新窗体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1013552/

10-13 08:17