c# - 在 TestCaseSource 中访问 NUnit 测试名称

标签 c# unit-testing nunit

我有一系列测试,我想在其中使用相同的测试用例数据来进行一系列不同的测试。

例如:

[Test, TestCaseSource("TestData")] 
public void Test1(Foo foo)
{
    // test 1
}

[Test, TestCaseSource("TestData")] 
public void Test2(Foo foo)
{
    // test 2
}

private static IEnumerable TestData() 
{
   TestCaseData data; 

   data = new TestCaseData(new Foo("aaa"));
   yield return data; 

   data = new TestCaseData(new Foo("bbb"));
   yield return data; 
}

这会导致一系列测试报告如下:

Namespace.That.Is.Very.Long.TestClass.Test1(Namespace.That.Is.Very.Long.Foo)  
Namespace.That.Is.Very.Long.TestClass.Test1(Namespace.That.Is.Very.Long.Foo)  
Namespace.That.Is.Very.Long.TestClass.Test2(Namespace.That.Is.Very.Long.Foo)  
Namespace.That.Is.Very.Long.TestClass.Test2(Namespace.That.Is.Very.Long.Foo)  

...当您不知道“foo”失败的原因时,这并没有多大意义。

如果as suggested in this SO question我这样设置名称:

   data = new TestCaseData(new Foo("aaa"));
   data.SetName("foo=aaa");
   yield return data; 

...然后我所有的测试结果如下所示:

foo=aaa   
foo=bbb  
foo=aaa  
foo=bbb 

所以我想弄清楚如何获取当前的测试方法名称。那会出现,as described in this other SO question通过 TestContext 完成。

但是,尽管存在 TestContext.Current.Test,所有属性(如 Name)在尝试访问它们时都会抛出 NullReferenceException。

是否有其他方法可以实现在测试名称中提供更多有用信息的目标?

最佳答案

TestName 属性在 NUnit 3 中支持字符串格式化。

这是一个示例用法:

private static IEnumerable TestData()
{
    TestCaseData data;

    data = new TestCaseData(new Foo("aaa"))
                            .SetName("case 1 {m}");
    yield return data;

    data = new TestCaseData(new Foo("bbb"));
    yield return data;
}

将生成以下输出:

enter image description here

如您所见,第一种情况的测试名称包含自定义前缀 + 方法名称。

使用this link有关 NUnit 的字符串格式化功能的更多信息。

2 个类可用于此操作 NUnitTestCaseBuilder (line 83)TestNameGenerator 方法 .GetDisplayName()

关于c# - 在 TestCaseSource 中访问 NUnit 测试名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26374265/

相关文章:

c++ - Boost.Test 应用程序调试

unit-testing - 为什么在 Nunit 中 TestFixtureSetUp 之前执行 TestCaseSource

c# - 如何在 Nunit 中调用 WPF Dispatcher?

c# - 将 WPF DataGridComboBoxColumn 与 MVVM (WAF) 绑定(bind)

java - 在 Mockito 中设置后重置模拟的正确替代方法是什么?

c# - MVVM 和避免 Monolithic God 对象

java - 捕获异常时写入的日志消息的单元测试

nunit - TeamCity和正在运行的NUnit测试

c# - .net sql 异常处理 - 如何获取 sp 参数/值

c# - 转换为值类型 'Boolean' 失败,因为具体化值为 null