gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:48:05 27 4
gpt4 key购买 nike

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

例如:

[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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com