Предоставление нескольких операторов 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+)*)
вместо .*
в обязательном порядке тоже.