我想知道是否可以在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]实际上被使用了,但不是我期望的那样。关于如何解决我的问题的任何想法都很好!