是否有一种方法可以将参数分组为单个参数,例如通过一个可以产生所有数据的数据结构?
例如我想避免使用带有太多参数的方法:
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) {
...
是否有更好的方法来转移那么多输入?
谢谢
答案 0 :(得分:3)
在步骤中使用数据表可以帮助组织以下信息:
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和Cucumber Data Tables)。为了确保编译时的安全,您应该可以将表映射到POJO。
答案 1 :(得分:0)
一种更好的方法是将所有这些示例从功能中删除,并将其推入步骤定义所调用的帮助器方法中。
示例表中的每组示例都应具有某些含义(否则为什么它们会排在首位!)。您可以使用此均值来确定捕获特定参数组合的名称。然后,您可以在方案中使用该名称替换参数。
希望您可以在此处使用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)
。