使用TestCaseSource时的迭代数

时间:2018-06-25 01:52:26

标签: 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
}

我希望能够在迭代消息中包含迭代次数

2 个答案:

答案 0 :(得分:1)

可能有两种方法:

  1. 将迭代编号作为方法的参数。

  2. 为每个参数集使用dict实例而不是TestCaseDataobject[]允许您为测试指定一个名称,如果愿意,可以包含您的国际电话号码。

答案 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框架中的某些行。