我正在尝试编写一些测试GUI界面的测试。我决定选择NUnit.Forms。但是,测试会出现以下错误:
TearDown : System.ComponentModel.Win32Exception :请求的资源正在使用中
我有两个版本的源代码测试。
第一:
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);
}可测试的形式非常简单。有两个TextBox -- "txtInput“、"txtOutput”和按钮-- "btnRes“。在"txtInput“中引入了数学表达式,并给出了"txtOutput”输出响应。当您按"btnRes“键时,表达式的决定就会发生。如果字段"txtInput“为空,则该按钮将被禁用,您无法单击该按钮。
在搜索此问题的解决方案时,出现了以下链接:
不幸的是,我只能附加两个链接。但我学到的信息完全不同。特别是编写方法、设置和TearDown部分。
在任何情况下,我都指定我使用的版本:
因为在我看来,问题可能是框架的新版本,正如我学到的很久以前的文章。
谢谢你的建议。
发布于 2018-07-05 13:44:13
UseHidden属性:测试在单独的隐藏桌面上运行。这使得它们更快,而且它适用于任何不使用键盘或鼠标控制器的测试。它们的破坏性较小,输入测试不能干扰其他应用程序。
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。这将导致测试在原始的标准桌面上运行。
https://stackoverflow.com/questions/33566278
复制相似问题