在使用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
}我希望能够在断言消息中包含迭代号。
发布于 2018-06-26 01:30:06
不久之后,一所学院在试图解决这个问题时找到了一个解决办法。
它结合了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框架中的一些行。
发布于 2018-06-25 11:06:18
可以采取两种办法:
TestCaseData实例而不是object[]。TestCaseData允许您为测试指定一个名称,如果您愿意的话,它可以包括您的插入号。https://stackoverflow.com/questions/51015369
复制相似问题