Колледж нашел решение вскоре после того, как попытался решить какую-то проблему.
Он объединяет 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, которая выполняет ваш тест.