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版?恐怕我不确定,它已经有好几年没有发布了。好的,谢谢你提供的信息,这为我澄清了问题。