Многомерные контуры сценария в Specflow


Я создаю схему сценария, похожую на следующую (это упрощенная версия, но дает хорошее представление о моей проблеме):

Given I have a valid operator such as 'MyOperatorName'
    When I provide a valid phone number for the operator 
    And I provide an '<amount>' that is of the following '<type>'
    And I send a request 
    Then the following validation message will be displayed: 'The Format of Amount is not valid'
    And the following Status Code will be received: 'AmountFormatIsInvalid'

Examples:
    | type      | description                     | amount |
    | Negative  | An amount that is negative      | -1.0   |
    | Zero      | An amount that is equal to zero |  0     |
    | ......... | ..........                      | ....   |

Таблица примеров предоставляет тестовые данные, которые мне нужны, но я бы добавил другую таблицу примеров только с именами операторов (вместо MyOperatorName) для репликации тестов для различных операторов

Examples: 
   | operator  |
   | op_numb_1 |
   | op_numb_2 |
   | op_numb_3 |

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

1 8

1 ответ:

Рад, что вы знаете, что это невозможно... Так какие же есть варианты? Кажется, есть 5:

A: составьте таблицу с каждым вариантом (перекрестное произведение)

Examples:

 | type      | description                     | amount | operator  |
 | Negative  | An amount that is negative      | -1.0   | op_numb_1 |
 | Zero      | An amount that is equal to zero |  0     | op_numb_1 |
 | Negative  | An amount that is negative      | -1.0   | op_numb_2 |
 | Zero      | An amount that is equal to zero |  0     | op_numb_2 |
 | ......... | ..........                      | ....   | ...       | 

B. повторите сценарий для каждого оператора с таблицей входных строк. - но ты же сказал, что не хочешь этого делать.

C. повторите сценарий для каждой входной строки с таблицей операторов - Мне нравится этот вариант, потому что каждое правило является отдельным тестом. Если вы действительно, действительно хотите, чтобы каждый различные реализации вашей стратегии "оператор" проходят и терпят неудачу в одних и тех же сценариях проверки, тогда почему бы не написать каждый сценарий проверки в виде единого плана сценария: например

Scenario Outline: Operators should fail on Negative inputs
Given I have a valid operator such as 'MyOperatorName'
When I provide a valid phone number for the operator 
And I send a request with the amount "-1.0"
Then the following validation message will be displayed: 'The Format of Amount is not valid'
And the following Status Code will be received: 'AmountFormatIsInvalid'

Scenario Outline: Operators should fail on Zero inputs
...etc...
Переосмыслите, как вы используете Specflow - если вам нужны только ключевые примеры для иллюстрации ваших функций (как описано в спецификации на примере Гойко Адзича), то вы переусердствуете, проверяя каждую комбинацию. Однако если вы используете specflow для автоматизации полного набора интеграционных тестов тогда ваши сценарии могут быть подходящими... но вы, возможно, захотите подумать о е. E. напишите интеграционные / модульные тесты, основанные на идее, что ваша логика проверки "оператора" применяется только в одном месте. Если проверка одинакова для каждого оператора, почему бы не проверить ее один раз, а затем все операторы унаследовать или включить в свой состав один и тот же класс валидатора?