使用 TestCaseSource 时的迭代次数
Iteration number when using TestCaseSource
是否可以在使用 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
}
我希望能够在断言消息中包含迭代次数。
有两种可能的方法:
包括迭代次数作为方法的参数。
对每个参数集使用 TestCaseData
个实例而不是 object[]
。 TestCaseData
允许您为测试指定一个名称,如果您愿意,可以包含您的交互编号。
A学院在尝试解决某个问题后不久就找到了解决方案。
它结合了 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 框架中的某行。
是否可以在使用 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
}
我希望能够在断言消息中包含迭代次数。
有两种可能的方法:
包括迭代次数作为方法的参数。
对每个参数集使用
TestCaseData
个实例而不是object[]
。TestCaseData
允许您为测试指定一个名称,如果您愿意,可以包含您的交互编号。
A学院在尝试解决某个问题后不久就找到了解决方案。
它结合了 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 框架中的某行。