java - 使用 Cucumber 在一次测试中运行包含更多数据行的示例

标签 java cucumber bdd scenarios

我有4个场景,例如:

Scenario: test single unit transaction
Given Scene is set
When We did something
Then
 | header1 | unit  | etc. |
 | data1   | data2 | ...  |

Scenario: test multiple unit transaction
Given Scene is set
When We did something
Then
 | header1 | unit  | etc. |
 | data1   | data2 | ...  |
 | data3   | data4 | ...  |

Scenario: test single percentage transaction
Given Scene is set
When We did something
Then
 | header1 | percentage | etc. |
 | data1   | data2      | ...  |

Scenario: test multiple percentage transaction
Given Scene is set
When We did something
Then
 | header1 | percentage | etc. |
 | data1   | data2      | ...  |
 | data3   | data4      | ...  |

它们更复杂、更长,所以我想实现这样的目标:

Scenario Outline: test transactions
Given Scene is set
When We did something
Then
 | header1 | unit    | etc. |
 | <data1> | <data2> | ...  |
Examples: single transaction
 | header1 | unit    | etc. |
 | data1   | data2   | ...  |

Examples: multiple transaction
 | header1 | unit   | etc. |
 | data1   | data2  | ...  |  --------> these should run together in one test
 | data3   | data4  | ...  |  -------->

其他类型的交易也是如此。

不幸的是,Cucumber 继续将上述情况作为 3 个不同的场景运行,而不是 2 个,而第二个场景有 2 个事务。 有谁知道如何让它发挥作用吗?

非常感谢。

最佳答案

据我所知,当将 Scenario OutlineExamples 一起使用时,它将运行您在示例表中定义的尽可能多的行,因此 Cucumber 可以正常工作你的例子。

不确定您在这些场景中要做什么,但如果您想使用场景大纲,我认为您需要重组示例 你可以尝试这样的事情(未经测试,它可能会变得更复杂):

场景:

Scenario: test transactions
  Given the scene is set
  When we did something
  Then something should happen:
  | header1 | unit  |
  | data1   | data2 |
  | data3   | data4 |

步骤: 使用数据类:

@Then("^something should happen:$")
    public void explosionsHappen(List<Data> entries) {
        for (Data entry : entries) {
            //Do stuff to each entry without restarting the scenario
        }
    }

public class Data {
    String header1; 
    Integer unit;
}

使用数据表:

@Then("^something should happen:$")
public void explosionsHappen(DataTable data) throws Throwable {
    for (Map<String, Integer> data : data.asMaps(String.class, Integer.class)) {
            //Write code to handle Datatable
        }
}

更多相关信息herehere 。对于第二个链接,请浏览功能/步骤并检查它们是如何实现的。

可能还有其他方法可以实现您想要的功能。希望这有帮助!

关于java - 使用 Cucumber 在一次测试中运行包含更多数据行的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45555425/

相关文章:

java - 如何在 PlayerJoinEvent 上创建 ArrayList

java - 使用 simpleDateFormat java 解析日期

tdd - BD/TDD : can dependencies be a behavior?

java ant构建多个版本的软件

java - Android - Activity 中方法的单元测试

java - 如何使用 java cucumber 将 "#"作为功能文件中的有效参数传递

java - 使用 Cucumber 数据表注册 LocalDateTime xstream 转换器

intellij-idea - 是否有可以编写 cucumber 步骤定义的 Visual Studio Code 扩展?

javascript - cucumber JS : Custom parameter types not matching

javascript - javascript上下文中TDD和BDD的区别