具有针对不同类别的不同设置装置的Nunit测试用例

时间:2019-01-29 06:19:41

标签: nunit

我想知道是否可以在Nunit中针对不同类别使用不同的SetupFixture?

我有很多测试用例,希望能够在主机上运行并针对目标硬件运行。在大多数情况下,测试部分是相同的,只是一些参数(例如ip地址)不同。我可以针对不同类别使用不同的参数来处理。像这样:

// AA.cs
using NUnit.Framework;

namespace Test
{
    [TestFixture("localhost", Category="host")]
    [TestFixture("192.168.1.1", Category="target")]
    public class TestA
    {
        private string _host;
        public TestA(string host)
        {
            this._host = host;
        }

        [Test]
        public void MethodA1()
        {
            TestContext.Progress.WriteLine($"Running TC A.A1 against {_host}");
            // Do test
        }
    }
}

如果我使用[OneTimeSetup]并将其放入TestA类中,则可以对_host成员变量的不同值进行不同的设置。

现在,我想重构代码,并为整个命名空间使用SetUpFixture + OneTimeSetup,同时仍要跟踪所使用的类别。能做到吗?我尝试过:

// OneTime.cs
using NUnit.Framework;

namespace Test
{
    [SetUpFixture]
    [Category("target")]
    public class OneTime
    {
        [OneTimeSetUp]
        public void DoSetupTarget()
        {
            TestContext.Progress.WriteLine($"OneTimeSetup for target.");
        }
    }
}

但是,如果我为“目标”运行它,它将运行OneTimeSetup和两个类别

>> dotnet test --filter "TestCategory=target"
OneTimeSetup for target.
Running TC A.A1 against 192.168.1.1
Running TC A.A1 against localhost

如果我将其作为“主机”运行,它将运行目标OneTimeSetup和主机类别

>> dotnet test --filter "TestCategory=host"
OneTimeSetup for target.
Running TC A.A1 against localhost

不同的行为意味着[Category]实际上被使用了,但不是我期望的那样。关于如何解决我的问题的任何想法都很好!

0 个答案:

没有答案