繁体   English   中英

Cucumber-JVM:在步骤定义内调用Scenario或ScenarioOutline

[英]Cucumber-JVM: Call a Scenario or ScenarioOutline inside a step definition

我有一个步骤定义,其中传递了方案或方案大纲的名称:

@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的所有步骤,并将这些执行的步骤附加到当前场景中。 这意味着被调用方案的步骤成为当前方案的一部分。

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

黄瓜(通常是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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM