Предоставление нескольких операторов When для сценария SpecFlow

Довольно новый для SpecFlow, так что терпите меня.

Я работал с коллегой, чтобы получить общее представление о том, что вы можете сделать с SpecFlow.

Мы использовали классическую задачу FizzBuzz, которую мы использовали для тестирования модульного тестирования, чтобы сравнить, как мы будем делать аналогичную проблему в SpecFlow.

мы написали наши сценарии следующим образом, увеличивая код по мере необходимости:

(прошу прощения, просто хотел получить тесты)

Scenario: 1 is 1
    Given there is a FizzBuzzFactory
    When you ask What I Am with the value of 1
    Then the answer should be 1 on the screen

Scenario: 3 is Fizz
    Given there is a FizzBuzzFactory
    When you ask What I Am with the value of 3
    Then the answer should be Fizz on the screen

Scenario: 5 is Buzz
    Given there is a FizzBuzzFactory
    When you ask What I Am with the value of 5
    Then the answer should be Buzz on the screen

Scenario: 15 is FizzBuzz
    Given there is a FizzBuzzFactory
    When you ask What I Am with the value of 15
    Then the answer should be FizzBuzz on the screen

Это привело к эволюции, чтобы разработать метод, который будет рассчитывать сумму некоторых чисел

Сценарий, который мы написали, был:

Scenario: Sumof 1 + 2 + 3 is Fizz
    Given there is a FizzBuzzFactory
    When you add the sum of 1
    When you add the sum of 2
    When you add the sum of 3
    Then the answer should be Fizz on the screen

Метод, который мы написали, принимал одно число за раз, чтобы затем подвести итог.

В идеале я бы предоставил:

Scenario: Sumof 1 + 2 + 3 in one go is Fizz
    Given there is a FizzBuzzFactory
    When you add the sum of 1,2,3
    Then the answer should be Fizz on the screen

Как вы можете настроить утверждение так, чтобы вы могли ожидать params int[] на подписи метода.

1 ответ

Решение

Ваша проблема действительно хорошо поддерживается связыванием шагов specflow, если вы используете StepArgumentTransformation, Вот почему я люблю specflow.

[When(@"you add the sum of (.*)")]
public void WhenYouAddTheSumOf(int[] p1)
{
    ScenarioContext.Current.Pending();
}

[StepArgumentTransformation(@"(\d+(?:,\d+)*)")]
public int[] IntArray(string intCsv)
{
    return intCsv.Split(',').Select(int.Parse).ToArray();
}

Здесь StepArgumentTransformation позволит вам теперь брать любой разделенный запятыми список целых в любом определении шага и принимать его в качестве параметра Array.

Стоит выучить несколько битов регулярных выражений, если вы хотите поиграть с StepArgumentTransformations, чтобы сделать их красивыми и конкретными. Обратите внимание, я мог бы использовать (\d+(?:,\d+)*) вместо .* в обязательном порядке тоже.

Другие вопросы по тегам