Шаг огурца с многочисленными параметрами - PullRequest
3 голосов
/ 28 июня 2019

Есть ли способ сгруппировать параметры в один, например, передать структуру данных, которая возвращает все из них?

например, я хочу избежать использования методов с слишком большим количеством аргументов:

Scenario Outline: My scenario has too many parameters
    When I perform my request with these inputs: <param1>, <param2>, <param3>, <param4>, <param5>, <param6>, <param7>, <param8>, <param9>, <param10>, <param11>
 Examples:
  | param1 | param2 | param3 | param4 | param5 | param6 | param7 | param8 | param9 | param10 | param11 |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |

, а затем метод:

@Given("^When I perform my request with these inputs: (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+)$")
public void tooMany(String param1, String param2, String param3, String param4, String param5, String param6, String param7, String param8, String param9, String param10, String param11)  {
...

Есть ли лучшие подходы для передачи такого количества входов?

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 июня 2019

Использование таблицы данных как части вашего шага может помочь организовать эту информацию:

Scenario Outline: My scenario has too many parameters
  When I perform my request with the following inputs:
    | Field   | Value     |
    | param1  | <param1>  |
    | param2  | <param2>  |
    | param3  | <param3>  |
    | param4  | <param4>  |
    | param5  | <param5>  |
    | param6  | <param6>  |
    | param7  | <param7>  |
    | param8  | <param8>  |
    | param9  | <param9>  |
    | param10 | <param10> |
    | param11 | <param11> |

Examples:
  | param1 | param2 | param3 | param4 | param5 | param6 | param7 | param8 | param9 | param10 | param11 |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |

И ваше определение шага становится:

@When("When I perform my request with the following inputs:")
public void notTooManyAnymore(DataTable table) {
    // Use table to get the params
}

Теперь вы можете извлечь параметры из table (см. Таблицы данных в огурцах и Таблицы данных огурцов ). Вы должны быть в состоянии сопоставить таблицу с POJO для некоторой безопасности времени компиляции.

0 голосов
/ 01 июля 2019

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

Каждый набор примеров в таблице примеров должен что-то значить (в противном случае, почему они там, во-первых!). Вы можете использовать это значение для определения имени, которое фиксирует определенную комбинацию параметров. Затем вы можете использовать это имя в своем сценарии для замены параметров.

Надеюсь, что вы можете справиться со мной, используя foo, bar и request в качестве имен, в вашем примере нет ничего достаточно значительного для извлечения лучших имен.

После этого у нас будет

Scenario: Make a foo request
  When I perform a foo request

и Ruby-реализация этого (вам придется самому переводить на Java) будет

module RequestStepHelper
  def foo_example_params
    {
      param1: dummy,
      param2: dummy,
      ...
    }
  end

  def perform_request(params : {})
    # process hash to make correct call
    ...
  end
end
World RequestStepHelper

When 'I perform a foo request' do
  perform_request(foo_example_params)
end

Итак, теперь удалили весь этот мусор из вашего файла объектов, который теперь может сосредоточиться на описании ЧТО происходит и ПОЧЕМУ его важно. Кроме того, вся обработка параметров теперь выполняется в коде, где у вас гораздо больше возможностей, и вы можете делать такие вещи, как брать существующий набор параметров и изменять их, например, foo_example_params.except(param1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...