NUnit TestCaseSource, как установить параметры из списка - PullRequest
0 голосов
/ 02 апреля 2020

Один из моих общих Class methods генерирует list из parameters, и я хочу установить каждый из них последовательно в качестве параметра для моего NUnit теста.

Я читаю некоторую документацию о TestCaseSource атрибуте , но не могу понять, как это реализовать.

Например, мой метод возвращает список с

"1", "2", "3", "4"

... внутри, как я могу поставить каждого из них в свой тест. Спасибо!

Вот мои method, которые возвращают list:

        public static List<string> TestCombinationsProvider()
    {
        List<string> resultList = new List<string>();
        List<string> parametersList = new List<string>();

        foreach (var item in ReturnDynamicPararmetersEntityProperties())
        {
            parametersList.Add(item.Name);
        }

        for (int i = 0; i < parametersList.Count; i++)
        {
            for (int j = i + 1; j < parametersList.Count; j++)
            {
                resultList.Add(parametersList[i] + " AND " + parametersList[j]);
            }
        }

        return resultList;
    }

И пустой Nunit тест:

    [Test]
    [TestCaseSource("")]
    public void Test1()
    {

    }

Я хочу запустить мой тест с каждой строкой из моего списка

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Конструктор TestCaseSourceAttribute имеет две перегрузки, если вам нужно установить данные из другого класса, вы должны использовать этот конструктор.

TestCaseSourceAttribute(Type sourceType, string sourceName);

И это выглядит так:

public class TestData {

    public static IEnumerable<string> TestCombinationsProvider()
    {
        var parametersList = ReturnDynamicPararmetersEntityProperties().Select(x => x.Name).ToList();

        for (int i = 0; i < parametersList.Count; i++)
        {
            for (int j = i + 1; j < parametersList.Count; j++)
            {
                yield return  parametersList[i] + " AND " + parametersList[j];
            }
        }
    }
}

public class Tests
{
    [TestCaseSource(typeof(TestData), nameof(TestData.TestCombinationsProvider))]
    public void Test1(string test)
    {
        Assert.Pass();
    }
}
0 голосов
/ 02 апреля 2020

Документы довольно ясны. Вместо того, чтобы возвращать List<string>, вам нужно вернуть список тестовых случаев, например, напрямую используя IEnumerable<TestCaseData>:

public static IEnumerable<TestCaseData> TestCombinationsProvider()
{
    List<string> resultList = new List<string>();
    List<string> parametersList = new List<string>();

    foreach (var item in ReturnDynamicPararmetersEntityProperties())
    {
        parametersList.Add(item.Name);
    }

    for (int i = 0; i < parametersList.Count; i++)
    {
        for (int j = i + 1; j < parametersList.Count; j++)
        {
            yield return new TestCaseData(parametersList[i] + " AND " + parametersList[j]);
        }
    }
}

Для этого метода есть несколько разных подписей, например, также возвращая коллекцию object[]. Но я не буду их рекомендовать, так как вы теряете многое из того, что вы можете сделать с TestCaseData, например, устанавливая каждый тест Name или его Description.

. Тогда украсьте свой актуал Метод испытания:

[Test]
[TestCaseSource(nameof(TestCombinationsProvider))]
public void Test1(string p)
{

}

РЕДАКТИРОВАТЬ: Когда ваш TestCombinationsProvider -метод находится в другом классе, используйте вместо этого:

[TestCaseSource(typeof(TheClass), nameof(TheClass.TestCombinationsProvider))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...