具有众多参数的黄瓜步骤
Cucumber step with numerous parameters
有没有办法将参数组合成一个参数,例如传递一个产生所有这些的数据结构?
例如我想避免使用带有太多参数的方法:
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) {
...
是否有更好的方法来传输这么多输入?
谢谢
在您的步骤中使用数据 table 可以帮助组织这些信息:
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
中提取参数(参见 Data Tables in Cucumber and Cucumber Data Tables)。您应该能够将 table 映射到 POJO 以确保编译时安全。
更好的方法是将所有这些示例从功能中取出,并将它们下推到步骤定义调用的辅助方法中。
示例 table 中的每组示例都应该有含义(否则它们为什么会出现在第一位!)。您可以使用此均值来确定捕获特定参数组合的名称。然后,您可以在场景中使用该名称来替换参数。
希望你能应付我在这里使用 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)
.
有没有办法将参数组合成一个参数,例如传递一个产生所有这些的数据结构?
例如我想避免使用带有太多参数的方法:
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) {
...
是否有更好的方法来传输这么多输入?
谢谢
在您的步骤中使用数据 table 可以帮助组织这些信息:
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
中提取参数(参见 Data Tables in Cucumber and Cucumber Data Tables)。您应该能够将 table 映射到 POJO 以确保编译时安全。
更好的方法是将所有这些示例从功能中取出,并将它们下推到步骤定义调用的辅助方法中。
示例 table 中的每组示例都应该有含义(否则它们为什么会出现在第一位!)。您可以使用此均值来确定捕获特定参数组合的名称。然后,您可以在场景中使用该名称来替换参数。
希望你能应付我在这里使用 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)
.