Номер итерации при использовании TestCaseSource - PullRequest
0 голосов
/ 25 июня 2018

Можно ли получить номер итерации для каждого тестового случая при использовании атрибута 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
}

Я хотел бы иметь возможность включить номер итерации в сообщение asert

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Колледж нашел решение вскоре после того, как попытался решить какую-то проблему.

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

0 голосов
/ 25 июня 2018

Возможны два подхода:

  1. Включить номер итерации в качестве аргумента метода.

  2. Использовать TestCaseData экземпляров вместо object[] для каждого набора аргументов.TestCaseData позволяет вам указать имя для теста, которое может включать ваше целое число, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...