Nunit3如何根据TestFixtureSource传递的参数更改测试用例名称

wad*_*ade 8 nunit nunit-3.0

我正在使用NUnit 3.0和TestFixtureSource在不同的参数/配置下多次在灯具内运行测试用例(我确实希望在TestFixture级别执行此操作).简单的例子:

[TestFixtureSource(typeof (ConfigurationProvider))]
public class Fixture
{
    public Fixture(Configuration configuration)
    {
        _configuration = configuration;
    }

    private Configuration _configuration;

    [Test]
    public void Test()
    {
        //do something with _configuration
        Assert.Fail();
    }
}
Run Code Online (Sandbox Code Playgroud)

假设其中一个配置的Test()失败,另一个配置失败.在运行报告文件和Visual Studio的测试资源管理器中,失败和成功运行的名称将显示为Test(),它不会告诉我有关哪个设置导致问题的任何信息.

有没有办法在这种情况下影响测试用例名称(即每个夹具运行/配置的名称前缀)?作为一种解决方法,我现在在每个测试用例发生之前打印到结果输出,但我宁愿避免这样做.

由于NUnit 3.0处于测试阶段且此功能相当新,我无法在文档中找到任何内容.我发现了TestCaseData,但我认为它不适合与灯具一起使用(它是专为测试用例设计的).

小智 3

我找不到更改测试名称的方法,但这应该不是必需的,因为 NUnit3 通过包含测试夹具的描述来构造测试名称。

如果and具有如下实现,则Fixture可以不加更改地使用问题中的示例类:ConfigurationConfigurationProvider

public class Configuration
{
    public string Description { get; }

    public Configuration(string description)
    {
        Description = description;
    }

    public override string ToString()
    {
        return Description;
    }
}

public class ConfigurationProvider : IEnumerable
{
    public IEnumerator GetEnumerator()
    {
        yield return new Configuration("Foo");
        yield return new Configuration("Bar");
        yield return new Configuration("Baz");
    }
}
Run Code Online (Sandbox Code Playgroud)

“技巧”是确保夹具的构造函数参数是字符串或具有ToString给出夹具的合理描述的方法。

如果您在 Visual Studio 中使用 NUnit 3 测试适配器,则测试夹具将显示为Fixture(Foo)Fixture(Bar)因此Fixture(Baz)您可以轻松地区分它们的测试。nunit3-console.exe 的 xml 输出也使用描述性名称 fx:fullname=MyTests.Fixture(Bar).Test

<test-case id="0-1003" name="Test" fullname="MyTests.Fixture(Bar).Test" methodname="Test" classname="MyTests.Fixture" runstate="Runnable" result="Failed" ... >
    <failure>
        <message><![CDATA[]]></message>
        <stack-trace><![CDATA[at MyTests.Fixture.Test() in ... ]]></stack-trace>
    </failure>
    ...
</test-case>
Run Code Online (Sandbox Code Playgroud)

在 Visual Studio 中使用 NUnit 3 测试适配器