首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于NUnit.Forms的GUI接口测试

基于NUnit.Forms的GUI接口测试
EN

Stack Overflow用户
提问于 2015-11-06 11:55:51
回答 1查看 2.4K关注 0票数 2

我正在尝试编写一些测试GUI界面的测试。我决定选择NUnit.Forms。但是,测试会出现以下错误:

TearDown : System.ComponentModel.Win32Exception :请求的资源正在使用中

我有两个版本的源代码测试。

第一:

代码语言:javascript
复制
using System.Windows.Forms;
using NUnit.Extensions.Forms;
using NUnit.Framework;
using YAMP;

namespace Tests.GUITests
{
    [TestFixture]
    public class GuiTest : NUnitFormTest
    {
        private FrmMain _frm;

        //[SetUp] // or it is still needed
        public override void Setup()
        {
            base.Setup();
            _frm = new FrmMain();
            _frm.Show();
        }

        [Test]
        public void TestData()
        {
            var txtInput = new TextBoxTester("txtInput") {["Text"] = "2+2"};
            var txtOutput = new TextBoxTester("txtOutput");
            Assert.AreEqual("2+2", txtInput.Text);

            var btnRes = new ButtonTester("btnRes");
            btnRes.Click();
            Assert.AreEqual("4", txtOutput.Text);
        }
    }
}

第二:

代码语言:javascript
复制
using System.Windows.Forms;
using NUnit.Extensions.Forms;
using NUnit.Framework;
using YAMP;

namespace Tests.GUITests
{
    [TestFixture]
    public class GuiTest : NUnitFormTest
    {
        private FrmMain _frm;

        //[SetUp] // or it is still needed
        public override void Setup()
        {
            base.Setup();
            _frm = new FrmMain();
            _frm.Show();
        }

        [TearDown]
        public override void TearDown()
        {
            _frm.Close();
            _frm.Dispose();
        }

        [Test]
        public void TestData()
        {
            var txtInput = new TextBoxTester("txtInput") {["Text"] = "2+2"};
            var txtOutput = new TextBoxTester("txtOutput");
            Assert.AreEqual("2+2", txtInput.Text);

            var btnRes = new ButtonTester("btnRes");
            btnRes.Click();
            Assert.AreEqual("4", txtOutput.Text);
        }
    }
}

方法TestNoData有两个不同的版本:

代码语言:javascript
复制
    public void TestFormNoDataHandler()
    {
        var messageBoxTester = new MessageBoxTester("Message");
        messageBoxTester.ClickOk();
    }

    [Test]
    public void TestNoData()
    {
        ExpectModal("Message", TestFormNoDataHandler);
        var txtInput = new TextBoxTester("txtInput") {["Text"] = string.Empty};
        Assert.AreEqual(string.Empty, txtInput.Text);

        var btnRes = new ButtonTester("btnRes");
        btnRes.Click();
        Assert.IsFalse(_frm.DialogResult == DialogResult.OK);
    }

    [Test]
    public void TestNoData()
    {
        var txtInput = new TextBoxTester("txtInput") {["Text"] = string.Empty };
        Assert.AreEqual(string.Empty, txtInput.Text);

        var btnRes = new ButtonTester("btnRes");
        btnRes.Click();
        Assert.IsFalse(_frm.Enable);
    }

可测试的形式非常简单。有两个TextBox -- "txtInput“、"txtOutput”和按钮-- "btnRes“。在"txtInput“中引入了数学表达式,并给出了"txtOutput”输出响应。当您按"btnRes“键时,表达式的决定就会发生。如果字段"txtInput“为空,则该按钮将被禁用,您无法单击该按钮。

在搜索此问题的解决方案时,出现了以下链接:

不幸的是,我只能附加两个链接。但我学到的信息完全不同。特别是编写方法、设置和TearDown部分。

在任何情况下,我都指定我使用的版本:

  • Visual Studio 2015社区
  • NUnit - 2.6.4.14350
  • NUnitForms - 1.3.1771.29165

因为在我看来,问题可能是框架的新版本,正如我学到的很久以前的文章。

谢谢你的建议。

EN

回答 1

Stack Overflow用户

发布于 2018-07-05 13:44:13

UseHidden属性:测试在单独的隐藏桌面上运行。这使得它们更快,而且它适用于任何不使用键盘或鼠标控制器的测试。它们的破坏性较小,输入测试不能干扰其他应用程序。

UseHidden属性控制是否使用单独的桌面。

虽然在独立桌面上的测试更快、更安全(没有键盘或鼠标输入到单独运行的应用程序的危险),但是对于某些操作系统或环境,单独的桌面不起作用。测试会抛出错误,例如:

代码语言:javascript
复制
System.ComponentModel.Win32Exception : The requested resource is in use

--TearDown
   at NUnit.Extensions.Forms.Desktop.Destroy()
   at NUnit.Extensions.Forms.Desktop.Dispose()
   at NUnit.Extensions.Forms.NUnitFormTest.Verify()

在这种情况下,可以从测试类重写UseHidden属性,并将其设置为返回false。这将导致测试在原始的标准桌面上运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33566278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档