nunit - 是否可以在整个夹具上而不是在逐个测试的基础上更改 NUnit 测试名称约定?
问题描述
我想使用模板“{m}({1})”。现在我可以提供TestName = "{m}({1})"
每一个TestCase
属性。但是这样重复太多了。也有这个TestFixture
参数,但是使用它似乎没有任何效果:
[TestFixture(TestName = "{m}({1})")]
public class Tests
{
...
}
我的问题 - 是否可以通过指定一次而不是在每个TestCase
属性中指定给定夹具中所有测试的测试名称约定?
编辑 1
我想继续使用该TestCase
属性,即使 usingTestCaseSource
允许我只指定一次模板。
解决方案
您可以避免在每个 TestCase 属性中设置名称,TestCaseSource
方法TestCaseData
如下:
[TestFixture]
public class UnitTest1
{
[TestCaseSource(typeof(MyDataClass), nameof(MyDataClass.TestCases))]
public void DivideTest(int n, int d)
{
Assert.AreEqual(3, n / d);
}
}
public class MyDataClass
{
public static IEnumerable TestCases
{
get
{
yield return new MyTestCaseData(9, 3);
yield return new MyTestCaseData(30, 10);
yield return new MyTestCaseData(12, 4);
}
}
}
public class MyTestCaseData : TestCaseData
{
public MyTestCaseData(object arg1, object arg2) : base(arg1, arg2)
{
SetName("{m}({1})");
}
}
SetName
方法TestCaseData
允许设置单个测试用例的名称。因此,创建一个从 TestCaseData 派生的新类并在构造函数中设置名称将避免为每个 TestCase 属性设置名称,也使代码更清晰。
解决方案 2:(不使用 TestCaseSource 和 TestCases)
无法在本地使用TestFixture
TestName
属性和使用属性。TestCase
但是可以通过创建和使用自定义属性来实现相同的结果,例如MyTestCaseAttr
- 继承自TestCaseAttribute
并在其构造函数中设置名称的类(避免每次都设置名称)
[TestFixture]
public class UnitTest1
{
[MyTestCaseAttr(12, 4)]
public void DivideTest(int n, int d)
{
Assert.AreEqual(3, n / d);
}
[MyTestCaseAttr(4, 5, 6)]
public void AddTest(int a, int b, int c)
{
Assert.AreEqual(15, a + b + c);
}
}
public class MyTestCaseAttr : TestCaseAttribute
{
public MyTestCaseAttr(object arg1, object arg2) : base(arg1, arg2)
{
TestName = "{m}({1})";
}
public MyTestCaseAttr(object arg1, object arg2, object arg3) : base(arg1, arg2, arg3)
{
TestName = "{m}({1})";
}
}
推荐阅读
- javascript - Javascript 承诺:UnhandledPromiseRejectionWarning
- python-3.x - 如何更改 tkinter 中的按钮图标
- c# - 如何在 Visual Studio 2019 for c# 中定义默认名称字段建议
- mongodb - 我想在我的 localhost 而不是 127.0.0.1 上运行 MongoDB
- php - 我的 foreach 查询不工作,我收到一个错误
- linux - 使用给定 PID 的 bg 和 fg
- android - 当条件为真时,Android If 语句不会中断
- node.js - NodeJS ejs 无法在视图目录中查找视图“布局”
- python - 使用python中的TCP套接字编程从服务器接收数据并将其写入.txt文件
- java - 硬编码文件路径和作为命令行参数传递之间的文件输出差异