java - cucumber -JVM : Call a Scenario or ScenarioOutline inside a step definition

标签 java cucumber cucumber-java

我有一个步骤定义,我在其中传递场景或场景大纲的名称:

@When("^I execute the steps of the following scenario or scenario outline: \"([^\"]*)\"$")
public void execute_steps_of_the_scenario_or_scenario_outline(String name){
...
}

我的意图是执行所调用的 Scenario/ScenarioOutline 的所有步骤,并将这些执行的步骤附加到当前场景中。这意味着被调用场景的步骤成为当前场景的一部分。

但是我一直无法找到一种方法来做到这一点。

最佳答案

Cucumber(以及一般的 BDD/TDD)不应该这样使用。每个场景/测试应该相互隔离,并且在另一个场景上执行步骤不是一个好的做法。

您可以在功能上使用后台步骤来跨该功能的场景执行常见步骤,也可以使用标签在使用 Hooks 执行场景之前和/或之后执行一组特定的操作。

话虽如此,您可以在粘合代码中编写一些逻辑来维护在每个场景中调用的步骤(方法)列表,并在后续场景中调用相同的步骤列表。这假设您可以保证场景的执行顺序,这(再次)违背了所有 TDD 最佳实践。下面是实现我刚刚描述的内容的框架代码示例。

private Scenario scenario;

private Map<String, List<String>> scenarioSteps = new HashMap<>();

@Before
public void setUp(Scenario scenario) {

    this.scenario = scenario;

    scenarioSteps.put(scenario.getName(), new LinkedList<>());
}

@Given("^the first step is executed$")
public void the_first_step_is_executed() {

    final StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[1];

    scenarioSteps.get(scenario.getName()).add(stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName());
}

关于java - cucumber -JVM : Call a Scenario or ScenarioOutline inside a step definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47577615/

相关文章:

java - Cucumber Capture Custom Expressions Java - 如何允许在功能步骤中输入字符串?

junit4 - Serenity BDD 测试用例未在 Chrome 浏览器上运行

java - 可以在 XPages 中添加注解 @ManagedBean 吗?

Java swing 在鼠标拖放中绘制矩形

ruby-on-rails - NoMethodError 运行 cucumber 测试

java - 将 cucumber 功能文件中的数字作为字符串包含在内?

Java MS Word 和 PDF 转换为图像 (png/jpg)

java - 正则表达式提取数字并用千位分隔符对它们进行分组

java - Cucumber,Java Picocontainer/Constructor注入(inject): TestContext & ScenarioContext),如何在多个步骤定义之间共享多个数据

java - 如何为 Cucumber stepdef 指定源 jar