具有众多参数的黄瓜步骤

有没有办法将参数组合成一个参数,例如传递一个产生所有参数的数据结构?


例如,我想避免使用带有太多参数的方法:


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)  {

...

有没有更好的方法来传输那么多输入?


墨色风雨
浏览 99回答 2
2回答

Helenr

在您的步骤中使用数据表可以帮助组织这些信息:Scenario Outline: My scenario has too many parameters&nbsp; When I perform my request with the following inputs:&nbsp; &nbsp; | Field&nbsp; &nbsp;| Value&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; | param1&nbsp; | <param1>&nbsp; |&nbsp; &nbsp; | param2&nbsp; | <param2>&nbsp; |&nbsp; &nbsp; | param3&nbsp; | <param3>&nbsp; |&nbsp; &nbsp; | param4&nbsp; | <param4>&nbsp; |&nbsp; &nbsp; | param5&nbsp; | <param5>&nbsp; |&nbsp; &nbsp; | param6&nbsp; | <param6>&nbsp; |&nbsp; &nbsp; | param7&nbsp; | <param7>&nbsp; |&nbsp; &nbsp; | param8&nbsp; | <param8>&nbsp; |&nbsp; &nbsp; | param9&nbsp; | <param9>&nbsp; |&nbsp; &nbsp; | param10 | <param10> |&nbsp; &nbsp; | param11 | <param11> |Examples:&nbsp; | param1 | param2 | param3 | param4 | param5 | param6 | param7 | param8 | param9 | param10 | param11 |&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; &nbsp;| dummy&nbsp; &nbsp;|&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; | dummy&nbsp; &nbsp;| dummy&nbsp; &nbsp;|您的步骤定义变为:@When("When I perform my request with the following inputs:")public void notTooManyAnymore(DataTable table) {&nbsp; &nbsp; // Use table to get the params}现在您可以从中提取参数table(请参阅Cucumber和Cucumber 数据表中的数据表)。为了某些编译时安全,您应该能够将表映射到 POJO。

慕莱坞森

更好的方法是将所有这些示例从功能中取出,并将它们下推到步骤定义调用的辅助方法中。示例表中的每组示例都应该有某种含义(否则为什么它们首先出现在那里!)。您可以使用此均值来确定捕获特定参数组合的名称。然后,您可以在场景中使用该名称来替换参数。希望您可以在这里使用 foo、bar 和 request 作为名称来应对我,您的示例没有足够重要的内容来提取更好的名称。在此之后,我们将有Scenario: Make a foo request&nbsp; When I perform a foo request和这个的 ruby 实现(你必须自己翻译成 java)将是module RequestStepHelper&nbsp; def foo_example_params&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; param1: dummy,&nbsp; &nbsp; &nbsp; param2: dummy,&nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }&nbsp; end&nbsp; def perform_request(params : {})&nbsp; &nbsp; # process hash to make correct call&nbsp; &nbsp; ...&nbsp; endendWorld RequestStepHelperWhen 'I perform a foo request' do&nbsp; perform_request(foo_example_params)end所以现在已经从您的功能文件中删除了所有垃圾,现在可以专注于描述正在发生的事情以及为什么它很重要。此外,所有参数的处理现在都在代码中完成,您可以使用更多的功能,并且可以做一些事情,比如获取一组现有的参数并修改它们,例如foo_example_params.except(param1)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java