Cucumber step with numerous parameters

João Matos :

Is there a way to group the parameters into a single one, e.g. pass a data structure that yields all of them?

e.g. I want to avoid having methods with too many arguments:

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   |

and then the method:

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

Are there better approaches to transfer that many inputs?

Thank you

Greg Burghardt :

Using a data table as part of your step can help organize this information:

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   |

And your step definition becomes:

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

Now you can extract the params from the table (see Data Tables in Cucumber and Cucumber Data Tables). You should be able to map the table to a POJO for some compile time safety.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=123206&siteId=1