NUnit testcasesource с данными, реорганизованными в другой класс - PullRequest
6 голосов
/ 07 июня 2011

Я использую NUnit с атрибутом TestCaseSource, чтобы проводить управляемое данными тестирование с динамическими данными в том же подходе, что и NUnit TestCaseSource передать значение фабрике и Как передать динамические объекты в функцию NUnit TestCase?

В каждом случае они используют IEnumerable для указания данных. Из документации NUnit здесь http://nunit.org/index.php?p=testCaseSource&r=2.5 следует, что это должен быть статический член или член экземпляра того же класса, что и TestCase.

Я хотел бы преобразовать это в другой класс, поскольку я хочу использовать тот же атрибут TestCaseSource. Кто-нибудь знает возможно ли это?

Ответы [ 3 ]

8 голосов
/ 26 августа 2016

Роберт уже ответил на него, но я постараюсь улучшить его ответ новыми функциями C #.

public static class TestCasesData 
{ 
      private static string[] TestStringsData() 
      {
           return new string[] {"TEST1", "TEST2"};
      }
      private static string[] TestIntsData() 
      {
           return new in[] { 1, 2};
      }
}
[TestFixture]
public class MyTest
{
    [Test]
    [TestCaseSource(typeof(TestCasesData ), nameof(TestCasesData .TestStringsData))]
    public void TestCase1(...)
    {
    }

    [Test]
    public void TestCase2(
      [ValueSource(typeof(TestCasesData), "TestIntsData")] int testData,
    )
    {
    }
}
4 голосов
/ 13 мая 2016

Вы можете сделать что-то вроде:

[TestCaseSource(typeof(CommonSource), "GetData")]
public void MyTest(...) {...}

Первый аргумент конструктора атрибута сообщает ему, какой класс искать, а второй аргумент - конкретное имя члена для использования.

3 голосов
/ 07 июня 2011

Если NUnit требует, чтобы TestCaseSource находился в том же классе, что и тесты, самый простой способ - вызвать этот метод для вызова вашего общего метода. Затем детали можно хранить в другом месте, поэтому вы минимизируете дублирующийся код.

Например, каждый тестовый класс может иметь следующее:

IEnumerable LocalSource()
{
    return CommonSource.GetData();
}

Класс CommonSource будет отдельным классом, который загружает данные, необходимые для тестов.

...