C# NUnit控制台找不到NUnit 3.x的NUnitForms测试的测试夹具
我一直在玩弄C# NUnit控制台找不到NUnit 3.x的NUnitForms测试的测试夹具,c#,nunit,nunit-console,C#,Nunit,Nunit Console,我一直在玩弄NUnitForms,我的简单测试遇到了障碍。我将在下面提供更多信息,但为了简单地总结问题,我处于需要从NUnitFormTest类继承的状态,以使用ExpectModal功能,但这会导致找不到by测试(使用NUnit 3.6.1)。如果我降级到NUnitversion 2.x,则会找到测试,但在拆卸功能中会出现错误。这里有我遗漏的东西吗 现在,有关完整信息,请参见下文 我的测试最初参考了NUnit 3.6.1,如下所示: using EnterpriseManager; using
NUnitForms
,我的简单测试遇到了障碍。我将在下面提供更多信息,但为了简单地总结问题,我处于需要从NUnitFormTest
类继承的状态,以使用ExpectModal
功能,但这会导致找不到by测试(使用NUnit 3.6.1)。如果我降级到NUnit
version 2.x,则会找到测试,但在拆卸功能中会出现错误。这里有我遗漏的东西吗
现在,有关完整信息,请参见下文
我的测试最初参考了NUnit 3.6.1,如下所示:
using EnterpriseManager;
using NUnit.Extensions.Forms;
using NUnit.Framework;
namespace ManagerTests
{
[TestFixture]
public class ManagerTests
{
[Test]
public void ConnectTest()
{
ConnectForm form = new ConnectForm();
form.Show();
ButtonTester testButton = new ButtonTester("TestConnectionButton", "ConnectForm");
testButton.Click();
LabelTester testLabel = new LabelTester("StatusLabel", "ConnectForm");
Assert.AreEqual("Connection successful", testLabel.Text);
}
}
}
using EnterpriseManager;
using NUnit.Extensions.Forms;
using NUnit.Framework;
namespace ManagerTests
{
[TestFixture]
public class ManagerTests : NUnitFormTest
{
[Test]
public void ConnectTest()
{
ConnectForm form = new ConnectForm();
form.Show();
ButtonTester testButton = new ButtonTester("TestConnectionButton", "ConnectForm");
testButton.Click();
LabelTester testLabel = new LabelTester("StatusLabel", "ConnectForm");
Assert.AreEqual("Connection successful", testLabel.Text);
ExpectModal("ConnectToServer", delegate {
LabelTester label = new LabelTester("ConnectStatusLabel", "ConnectToServer");
Assert.AreEqual("Connected", label.Text);
});
// Launch the modal dialog
ButtonTester connectButton = new ButtonTester("ConnectToServerButton", "ConnectForm");
connectButton.Click();
}
}
}
在上面的初始测试中,我没有从NUnitFormTest
类继承(当时不知道),但即使缺少该类,Visual Studio的测试资源管理器也会找到我的测试,我可以通过nunit3控制台
应用程序运行我的测试(已通过)
最后,我扩展了我的测试,调用了一个模态对话框,这给我带来了问题,尽管最终我读到了ExpectModal
功能,这导致我添加了NUnitFormTest
继承。测试结果如下:
using EnterpriseManager;
using NUnit.Extensions.Forms;
using NUnit.Framework;
namespace ManagerTests
{
[TestFixture]
public class ManagerTests
{
[Test]
public void ConnectTest()
{
ConnectForm form = new ConnectForm();
form.Show();
ButtonTester testButton = new ButtonTester("TestConnectionButton", "ConnectForm");
testButton.Click();
LabelTester testLabel = new LabelTester("StatusLabel", "ConnectForm");
Assert.AreEqual("Connection successful", testLabel.Text);
}
}
}
using EnterpriseManager;
using NUnit.Extensions.Forms;
using NUnit.Framework;
namespace ManagerTests
{
[TestFixture]
public class ManagerTests : NUnitFormTest
{
[Test]
public void ConnectTest()
{
ConnectForm form = new ConnectForm();
form.Show();
ButtonTester testButton = new ButtonTester("TestConnectionButton", "ConnectForm");
testButton.Click();
LabelTester testLabel = new LabelTester("StatusLabel", "ConnectForm");
Assert.AreEqual("Connection successful", testLabel.Text);
ExpectModal("ConnectToServer", delegate {
LabelTester label = new LabelTester("ConnectStatusLabel", "ConnectToServer");
Assert.AreEqual("Connected", label.Text);
});
// Launch the modal dialog
ButtonTester connectButton = new ButtonTester("ConnectToServerButton", "ConnectForm");
connectButton.Click();
}
}
}
问题就是从这里开始的。添加NUnitFormTest
类的继承后,Visual Studio和nunit3 console.exe都未检测到任何测试。我认为这可能与引用的NUnit
版本有关,所以我降级到了各种2.x版本。这允许Visual Studio检测测试(尽管nunit3 console.exe
不断报告“非决定性”结果),但所有测试都会失败,并出现以下错误:
Result StackTrace:
--TearDown
at NUnit.Extensions.Forms.Desktop.Destroy()
at NUnit.Extensions.Forms.NUnitFormTest.Verify()
Result Message: TearDown : System.ComponentModel.Win32Exception : The requested resource is in use
我对这个问题进行了一些搜索,但我发现的一切似乎都表明这是以前在NUnit
中遇到的某个问题,在某个点上得到了修复(不要引用我的话)。所以现在我处于一种状态,需要从NUnitFormTest
类继承以使用ExpectModal
功能,但这会导致找不到by测试。然而,如果我转到NUnit
version2.x,我会在TearDown
函数上遇到问题。这里有我遗漏的东西吗 NUnitForms已经很多年没有更新了,因此它仍然依赖于NUnit V2。当您从NUnitFormTest派生时,您使用的是NUnit 2.6.2,无论您认为自己安装了什么,因为代码与NUnit的版本紧密耦合
NUnitForms可以很容易地更新为NUNit 2.6.4,但除此之外,它还有一个更大的变化,甚至可能需要重写
顺便说一句,卢克很久以前就把我加入了这个项目,但我一直没有积极参与。我曾经希望它的一个版本能与NUnit3一起工作,但我怀疑是否有更多的需求来测试Windows窗体
您应该从解决方案中删除NUnit框架的所有软件包,并引用与NUnitForms一起安装的版本。如果你想尝试不同的版本,它们应该是NUnitForms的版本,以便您的测试和NUnitForms都引用同一个NUnit副本。目前无法尝试此操作,但解决拆卸问题的一个潜在解决方案是覆盖NUnitFormTest中的UseHidden属性以返回false。是否有已知方法使用NUnitForms
NUnit 3.x
或者它只适用于2.x版?恐怕我不确定,它已经有好几年没有发布了。好的,谢谢你提供的信息,这为我澄清了问题。