gpt4 book ai didi

c# - 使用 NUnit.Forms 进行 GUI 界面测试

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:44 25 4
gpt4 key购买 nike

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

TearDown : System.ComponentModel.Win32Exception : The requested resource is in use

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

首先:

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);
}
}
}

第二个:

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:

    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);
}

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

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

不幸的是,我只能附上 2 个链接。但是我了解到的信息却大相径庭。尤其是写方法Setup和TearDown的部分。

无论如何,我指定我使用的版本:

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

因为在我看来问题可能出在框架的最新版本上,因为我学到的文章很旧。

感谢您的任何建议。

最佳答案

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

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

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

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。这将使测试在原始的标准桌面上运行。

关于c# - 使用 NUnit.Forms 进行 GUI 界面测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33566278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com