Nunit 使用TestCaseSource时的迭代次数

Nunit 使用TestCaseSource时的迭代次数,nunit,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(MyTestCa

当使用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允许您为测试指定一个名称,如果您愿意,该名称可以包括您的交互编号


一所大学在试图解决一些问题后不久就找到了解决办法

它将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框架中执行测试的某一行

这两种方法都需要你手动维护迭代次数,不是吗?迭代次数有什么用?为什么不使用valA和valB呢?我的意思是迭代次数是MyTestCases数组的索引+1。因此,将测试与用作输入的数据相匹配,我不能使用valA/valB,因为在更复杂的情况下,很难将变量与它相关的行相匹配。