Java 具有多个参数的步骤
是否有一种方法将参数分组为一个参数,例如,传递一个生成所有参数的数据结构 e、 g.我希望避免使用参数过多的方法:Java 具有多个参数的步骤,java,cucumber,Java,Cucumber,是否有一种方法将参数分组为一个参数,例如,传递一个生成所有参数的数据结构 e、 g.我希望避免使用参数过多的方法: Scenario Outline: My scenario has too many parameters When I perform my request with these inputs: <param1>, <param2>, <param3>, <param4>, <param5>, <param
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 |
有没有更好的方法来转移这么多的投入
谢谢在步骤中使用数据表有助于组织这些信息:
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 |
现在,您可以从
表
中提取参数(请参阅和)。为了某种编译时安全性,您应该能够将表映射到POJO。更好的方法是将所有这些示例从功能中删除,并将它们下推到步骤定义调用的帮助器方法中
示例表中的每一组示例都应该具有某种意义(否则,为什么它们会出现在第一位!)。您可以使用此方法来确定捕获特定参数组合的名称。然后可以在场景中使用该名称替换参数
希望您可以在这里使用foo、bar和request作为名称来处理我的问题,因为您的示例没有足够重要的内容来提取更好的名称
在这之后,我们将
Scenario: Make a foo request
When I perform a foo request
这方面的ruby实现(您必须自己翻译成java)是
因此,现在我们已经从您的功能文件中删除了所有这些垃圾,这些文件现在可以专注于描述正在发生的事情及其重要性。此外,所有参数的处理现在都是在代码中完成的,在代码中您有更多的可用功能,可以做一些事情,例如获取一组现有的参数并修改它们,例如
foo\u示例\u参数。除了(param1)
void方法(字符串…参数){}
我如何才能做到这一点?arg'字符串。。。params'是字符串数组,但我们正在尝试发送11个单独的字符串。您知道如何更改步骤以匹配数组吗?为什么不能发送带有逗号分隔值的单个参数。然后将步骤def中的值除以,
相应地使用它。嗨,格雷格,谢谢你的回答。在我的示例中,我可以通过向示例部分添加行来运行更多测试,我如何在您建议的解决方案中执行相同的操作?您应该能够将步骤放到现有场景大纲中。让我为cucumber代码添加更多的上下文。@JoãoMatos:我更新了我的答案,提供了更多的上下文。我认为你应该将第一句“更好的方法”替换为“不同的方法”。你的答案很有用,但我不认为它比@Greg的答案更好。我发现将输入作为steps语句的一部分是有益的,因为它以更清晰的方式说明了您的测试到底要做什么。另一方面,在某些情况下,您的建议更有用,例如,我将坚持“更好的方法”原因如下:我认为我的方法更好;我知道核心cucumber团队会同意我的方法更好,因为他们的方法和我的方法一样好;编程中的常识是,具有大量参数的方法是反模式的。但无论如何,谢谢你的评论。
Scenario: Make a foo request
When I perform a foo request
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