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

时间:2015-09-15 23:38:00

标签: 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();
    }
}

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

在这种情况下是否有办法影响测试用例名称(即每个夹具运行/配置的名称前缀)?作为一种解决方法我目前正在每次测试前打印到结果输出案件大火但我宁愿避免这样做。

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

2 个答案:

答案 0 :(得分:2)

我无法找到更改testname的方法,但它不一定是必要的,因为NUnit3通过包含testfixture的描述来构造testname。

如果FixtureConfiguration具有如下实现,则问题中的示例类ConfigurationProvider可以不加改变地使用:

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");
    }
}

'''是为了确保fixture的constructor-parameter是一个字符串,或者有一个ToString - 方法,它给出了一个合理的夹具描述。

如果您在Visual Studio中使用NUnit 3测试适配器,则testfixtures将显示为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>

Using NUnit 3 Test Adapter in Visual Studio

答案 1 :(得分:0)

执行此类操作的一种方法是在源代码中使用查找和替换标记,并在使用命令行msbuild 执行之前动态构建测试库。高级步骤

  1. 在源代码中将测试用例名称定义为 sometest_TOKEN ,然后使用命令行工具,例如fnr.exe replce _TOKEN ,无论您喜欢什么。例如 sometest_build2145
  2. 使用msbuild编译dll,例如 msbuild / t:REbuild mytestproj.sln 。然后在 mytestproj.dll 中执行所有测试用例。