Генерация параметров DataRow для l oop дюймов C# Метод тестирования - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь написать несколько тестов для C# методов. Пример выглядит следующим образом.

[DataTestMethod]
[DataRow(1, 1)]
[DataRow(2, 1)]
[DataRow(3, 1)]
[DataRow(1, 2)]
[DataRow(2, 2)]
[DataRow(3, 2)]
[DataRow(1, 3)]
[DataRow(2, 3)]
[DataRow(3, 3)]
public void TestMethod1(int value1, int value2)
{
    Assert.AreEqual(value1.ToString() + value2.ToString(), string.Concat(value1.ToString(), value2.ToString()));
}

Мне интересно, есть ли какая-либо поддержка синтаксиса для создания нескольких DataRows с for-l oop?

[DataTestMethod]
[for(int i = 1; i <= 3; i++) {for(int j = 1; j <= 3; j++){ DataRow(j, i) }}] // Something like this
public void TestMethod1(int value1, int value2)
{
    Assert.AreEqual(value1.ToString() + value2.ToString(), string.Concat(value1.ToString(), value2.ToString()));
}

Любые предложения добро пожаловать.

1 Ответ

1 голос
/ 03 августа 2020

Есть способ использования DynamicData. Основное назначение метода stati c TestCaseGenerator - создание структуры циклов for для генерации тестовых примеров. Фактически, тестовые примеры создаются один за другим с синтаксисом yield return. Функциональность этого метода TestCaseGenerator аналогична требованию [for(int i = 1; i <= 3; i++) {for(int j = 1; j <= 3; j++){ DataRow(j, i) }}] // Something like this в вопросе.

[DataTestMethod]
[DynamicData(nameof(TestCaseGenerator), DynamicDataSourceType.Method)]
public void TestMethod1(int value1, int value2)
{
    Assert.AreEqual(value1.ToString() + value2.ToString(), string.Concat(value1.ToString(), value2.ToString()));
}
public static System.Collections.Generic.IEnumerable<object[]> TestCaseGenerator()
{
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 3; j++)
        {
            yield return new object[] { j, i };
        }
    }
}

Ссылка: https://www.meziantou.net/mstest-v2-data-tests.htm

...