Nunit3如何基于从TestFixtureSource传递的参数更改testcase名称
我正在使用NUnit 3.0和TestFixtureSource在一个装置内使用不同的参数/配置多次运行测试用例(我确实希望在TestFixture级别这样做)。简单的例子:Nunit3如何基于从TestFixtureSource传递的参数更改testcase名称,nunit,nunit-3.0,Nunit,Nunit 3.0,我正在使用NUnit 3.0和TestFixtureSource在一个装置内使用不同的参数/配置多次运行测试用例(我确实希望在TestFixture级别这样做)。简单的例子: [TestFixtureSource(typeof (ConfigurationProvider))] public class Fixture { public Fixture(Configuration configuration) { _configuration = configur
[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()失败,另一个配置的Test()成功。在运行报告文件和Visual Studio的测试资源管理器中,失败和成功运行的名称都将显示为just Test(),这不会告诉我是哪个安装程序导致了问题
在这种情况下,是否有办法影响测试用例名称(即,为每个夹具运行/配置添加前缀)?作为一种解决方法,我目前正在打印每个测试用例之前的结果输出,但我宁愿避免这样做
由于NUnit 3.0处于测试阶段,而且这个功能相当新,所以我在文档中找不到任何东西。我找到了TestCaseData,但我不认为它是专门为fixture设计的(它是为测试用例设计的)。我找不到更改testname的方法,但它应该不是必需的,因为NUnit3通过包含testfixture的描述来构造testname 如果
Configuration
和ConfigurationProvider
具有如下实现,则问题中的示例类Fixture
可以原封不动地使用:
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的构造函数参数是一个字符串,或者有一个ToString
-方法,该方法给出了fixture的合理描述
如果您在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>
...
执行此类操作的一种方法是让在源代码中查找并替换令牌,并在执行前使用命令行msbuild动态构建测试库。高级步骤是