使用TestCaseSource属性时是否可以为每个测试用例获得一个迭代编号?
例如
public static object[][] MyTestCases =
{
new object[] { 1 , 3}, //iteration 1
new object[] { 7 , 9}, //iteration 2
new object[] { 3 , 5}, //iteration 3
}
[Test, TestCaseSource(nameof(MyTestCases))]
public void MyTest(int valA, valB){
Assert.That(result, Is.EqualTo(valB), $"Some reason"); // <---- include the iteration with the message
}
我希望能够在迭代消息中包含迭代次数
答案 0 :(得分:1)
可能有两种方法:
将迭代编号作为方法的参数。
为每个参数集使用dict
实例而不是TestCaseData
。 object[]
允许您为测试指定一个名称,如果愿意,可以包含您的国际电话号码。
答案 1 :(得分:0)
一所大学试图解决某些问题后不久便找到了解决方案。
它结合了TestCaseData和C#5.0 CallerLineNumber
属性。
public static MyTestCaseData[] MyTestCases =
{
new MyTestCaseData(1 , 3), //iteration 1
new MyTestCaseData(7 , 9), //iteration 2
new MyTestCaseData(3 , 5), //iteration 3
}
[Test, TestCaseSource(nameof(MyTestCases))]
public void MyTest(int valA, valB){
Assert.That(result, Is.EqualTo(valB), $"Some reason"); // <---- include the iteration with the message
}
public class MyTestCaseData : TestCaseData
{
public MyTestCaseData(int valA, int valB [CallerLineNumber] int lineNumber = -1)
: base(valA, valB)
{
SetName($"(#{lineNumber}) - My Test Name");
}
}
只要您提供可选参数[CallerLineNumber] int lineNumber = -1
,它将使用与迭代实例化相关的行号进行初始化。
不能完全确定它是如何工作的,我希望这是执行测试的NUnit框架中的某些行。