我正在使用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
可以不加更改地使用问题中的示例类:Configuration
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");
}
}
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)
归档时间: |
|
查看次数: |
870 次 |
最近记录: |