我为此搜索了一下,但找不到确切的例子。我有一个表格作为一个步骤填写。表单字段如下所示:
日期:
货币:
总计:
说明:
但并非所有字段都需要用户输入数据。而不是写几种方法来解释不同的组合,如下所示:
(When I enter the 'Date' and 'Currency' and 'Total' and 'Description')
(When I enter the 'Date' and 'Total')
(When I enter the 'Currency' and 'Description')
etc...
我想以某种方式在功能文件中实现类似的东西:
When I enter the following details:
|Date |x |
|Currency |USD |
|Total |100 |
|Description |Test |
然后有一个方法来处理用户在第二列中输入的任何数据组合。
我发现网站有这个数据表驱动的示例:
When I enter the following details:
|Date |<date> |
|Currency |<currency> |
|Total |<total> |
|Description |<description> |
Example data:
|date |currency |total |description |
|x |USD |100 |foo |
|y |EUR |200 |test |
|z |HKD |124 |bar |
但这不是我所追求的。我不需要遍历预定示例数据的列表。我希望我已经清楚地总结了这个问题,并且有人知道一个好的地方去寻找这种实现的例子。谢谢你的建议!
答案 0 :(得分:1)
是的,您可以将数据表用作单个非重复步骤的参数。数据表的第一行必须是标题:
When I enter the following details:
|Name |Value|
|Date |x |
|Currency |USD |
|Total |100 |
|Description |Test |
这是在一个步骤中使用它的一种可能方式:
@Given("^I enter the following details:$")
public void i_enter_the_following_details(Map<String, String> details) throws Throwable {
for Map.Entry<String, String> entry : details.entrySet() {
String key = entry.getKey();
String value = entry.getValue();
switch (key) {
case "Date":
// add the date to the form
break;
// ...
}
}
}
您还可以通过声明具有该类型的参数,将该表格作为DataTable
,List
值对象,List<List<String>>
或List<Map<String>>
。 Map<String, String>
似乎最简单。
我用这种方式编写了这个例子,因为我假设您需要编写不同的代码来将每个值放在其字段中。如果每个字段的代码相同,您可以将字段的CSS选择器放在数据表中并摆脱切换。
答案 1 :(得分:0)
我能理解的是,您正在尝试对表单中的这4个字段进行组合测试。如果是这样那么你需要查看ScenaioOutline选项,我认为你指的是你所谓的数据表驱动。这将允许您提供所有组合作为示例。每个示例都将被选取并作为单独的场景运行。你可以修改你的时间 -
Scenaio Outline:
...
...
When I enter the following details : Date <date> Currency <currency>.......
...
...
Examples:
|date |currency |total |description |
|x |USD |100 |foo |
|y |EUR |200 |test |
|z |HKD |124 |bar |
如果将示例表中的任何数据留空,则空白将发送到When步骤。
OR - 如果要从具有与日期,货币等对应的实例变量的对象列表中获取Whenstep中的数据,可以在步骤定义中使用List参数。这样可以避免编写模式表达式。然后你的步骤变为
When I enter the following details :
date | currency | .......
<date> | <currency> | .......
确保实例变量名称与您创建的对象中的表格标题相匹配。