SpecFlow - Как использовать тесты, управляемые данными, такие как свойство NUnits TestCaseSource?

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

У меня часто бывают разные данные в каждой среде, в которой должен выполняться тест, поэтому я не могу указать жестко запрограммированные значения для параметров теста. Тривиальный пример - проверка того, что каждый тип учетной записи пользователя может войти в систему, учетные данные учетной записи пользователя могут быть получены с помощью запроса БД для динамического заполнения каждого тестового примера в NUnit:

public List<User> GetTestData()
{
    List<User> testData = new List<User>();
    testData = MyDatabase.GetAllUsersInfo().ToList();

    return testData;
}

[Test, TestCaseSource("GetTestData")]
public void CallLoginService(User user)
{
    var response = LoginController.TryLogin(User.UserName, User.Password);

    if (response.Error != null)
    {
        Assert.Fail("Failed to Login: {0}", response.Error);
    }

    Assert.AreEqual("Logged in ok", response.Message, "Login message not as expected");
}

Очевидно, это простой пример этой функции, но я думаю, что он достаточно хорошо описывает ее. Я знаю, что у нас есть возможность в SpecFlow использовать схему сценария и таблицу входных данных тестового прогона, но они все еще статичны, поэтому не соответствуют требованиям.

Я долго искал и еще не нашел в SpecFlow ничего подобного, знает ли кто-нибудь что-нибудь похожее на приведенное выше, которое можно использовать (или запланировать, если это прочитает кто-нибудь, кто работает над проектом)?

Спасибо :)


person chrisc    schedule 07.02.2013    source источник


Ответы (1)


Я понятия не имею, планируется ли что-то подобное, но на данный момент проблема в том, что существует этап генерации фонового кода, когда вы редактируете свой файл функции через Visual Studio.

Когда он сохраняется в Visual Studio, он анализируется и преобразуется в файл feature.cs, который компилируется и используется для тестирования.

Так что ваш процесс станет

  • отредактируйте свой источник данных
  • экспорт в файл функции
  • получить плагин VS specflow для преобразования в feature.cs
  • запустить msbuild
  • запускать тесты через Nunit или аналогичный

Я бы этого не сделал. Вместо этого я бы сосредоточился на том, чтобы мои тесты были лучшими примерами. Похоже, вы должны попытаться исчерпывающе рассмотреть все возможности. Не придумывайте примеры, чтобы охватить все возможные случаи, а вместо этого охватите как можно больше логики с помощью меньшего количества тестов.

person AlSki    schedule 07.02.2013
comment
Да, я знаю, что на данный момент кажется, что каждый случай передается обратно в файл feature.cs, и это становится статическим определением теста. Вы правы в своем втором абзаце, и моя стратегия в целом состоит в том, чтобы использовать хорошие примеры и правильно настроить тестовые данные. Этот конкретный тест, который я пытаюсь выполнить, немного отличается тем, что это тест интеграции клиента, чтобы убедиться, что непрерывный базовый счастливый путь работает для каждого клиента, поскольку моя система содержит много конфигураций, которые могут измениться, и нам нужно уверенность в том, что общий базовый поток данных для каждого клиента всегда работает. - person chrisc; 07.02.2013
comment
Я полагаю, что другая проблема заключается также в том, что не все участники тестирования, которые может использовать SpecFlow, имеют что-то, что работает так же, как TestCaseSource NUnit, поэтому может быть даже невозможно включить. Я вижу, как это можно было бы сделать, если бы SpecFlow работал только с использованием бегунов NUnit, но учитывая, что он должен поддерживать другие, что может быть причиной отсутствия этой функциональности. - person chrisc; 07.02.2013