NUnit-Console使用NUnit 3.x找不到NUnitForms测试的测试夹具

时间:2017-05-10 14:02:58

标签: c# nunit nunit-console

我一直在忙着NUnitForms而且我的简单测试遇到了麻烦。我将在下面提供更多信息,但简要总结一下这个问题,我处于一种状态,我需要从NUnitFormTest类继承以使用ExpectModal功能,但这会导致测试未找到(使用NUnit 3.6.1)。如果我降级到NUnit版本2.x,则会发现测试但我在TearDown函数上出错。我在这里找不到什么东西?

现在有关详细信息,请参阅下文......

我的测试最初是引用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);
        }
    }
}

在我上面的初始测试中,我没有继承NUnitFormTest类(当时没有意识到它),但即使缺少它,我的测试也会被Visual Studio找到测试资源管理器和我可以通过nunit3-console应用程序(已通过)运行我的测试。

最终我扩展了我的测试以调用一个模式对话框,这对我造成了问题,尽管最后我读到了导致我添加ExpectModal继承的NUnitFormTest功能。测试结果如下:

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保持报告" Inconclusive"结果)但所有测试都会因错误而失败:

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功能,但这会导致无法找到测试。然而,如果我向下移动到NUnit版本2.x,我会在TearDown函数上遇到问题。我有什么东西在这里失踪吗?

1 个答案:

答案 0 :(得分:1)

NUnitForms多年没有更新,所以它仍然依赖于NUnit V2。当您从NUnitFormTest派生时,无论您认为自己安装了什么,都使用NUnit 2.6.2,因为代码与NUnit的版本紧密耦合。

NUnitForms可以很容易地更新到NUNit 2.6.4,但除此之外,它还有一个更大的变化,甚至可能需要重写。

顺便说一句,卢克很久以前就把我加入了这个项目,但我还没有活跃过。我曾经希望将它的版本与NUnit 3一起使用,但我怀疑对Windows Forms的测试需求还有很多。

您应该从解决方案中删除NUnit框架的所有包,并引用随NUnitForms一起安装的版本。如果你想试验不同的版本,它们应该是NUnitForms的版本,这样你的测试和NUnitForms都引用了NUnit的同一副本。