当前位置: 首页 > 知识库问答 >
问题:

如何在Cucumber Java中的步骤之间传递变量值?

孙斌
2023-03-14

我有一个变量,我想在所有步骤中传递这个变量。任何人都可以通过代码片段示例建议如何在步骤之间传递变量值。任何帮助将不胜感激。

共有2个答案

袁宜民
2023-03-14
private static String myName = null;

@Given("I have a cucumber step")
public void i_have_a_cucumber_step() throws Throwable {
    myName = "Stackoverflow"

}

@Given("^I have (\\d+) (.*) in my basket$")
public void i_have_in_my_basket(int number, String veg) throws Throwable {
    System.out.println(myName));
}
应涵容
2023-03-14

在Cucumber for Java(cucumber-jvm)中,在步骤之间共享数据的预期方法是使用依赖集成(DI)容器 - 其中一些容器已与Cucumber集成。

使用DI的方法因容器而异,但这里有一个使用PicoContainer的示例:

// MySharedData.java
public class MySharedData {
    public String stringData;
}

// SomeStepDefs.java
public class SomeStepDefs {
    private MySharedData sharedData;

    public SomeStepDefs(MySharedData sharedData) {
        this.sharedData = sharedData;
    }

    // StepDefs omitted
}

// MoreStepDefs.java
public class MoreStepDefs {
    private MySharedData sharedData;

    public MoreStepDefs(MySharedData sharedData) {
        this.sharedData = sharedData;
    }

    // StepDefs omitted
}

DI 容器将确保为每个方案创建 MySharedData 的单个实例,并将其传递给需要它的每个步骤定义类。此方法的好处是 Cucumber 可确保方案之间不会泄漏共享状态,因为注入的依赖项是为每个方案重新创建的。

上面的示例使用构造函数注入(因此注入的依赖项由构造函数参数指定),但其他DI容器也支持其他注入机制,例如Spring的@了的

要让Cucumber使用DI,您需要选择一个(并且只有一个)DI集成并将其包含在您的类路径(或POM)中。选择是:

    < Li > pico container(cucumber-pico container . jar) < Li > Guice(cucumber-Guice . jar) < li>Weld (cucumber-weld.jar) < Li > Spring(cucumber-Spring . jar) < Li > OpenEJB(cucumber-OpenEJB . jar)

您还需要安装选定的DI容器本身,因为Cucumber jar仅提供Cucumber和DI容器之间的集成。

 类似资料:
  • 问题内容: 为了在步骤之间传递变量,我有步骤方法属于同一类,并使用该类的字段作为传递的信息。 下面是一个示例,如下所示: 带有步骤定义的Java类: 我的问题是在步骤之间共享信息是否是一个好习惯?或者将功能定义为: 问题答案: 为了在步骤之间共享共同点,您需要使用World。在Java中,它没有在Ruby中那么清晰。 引用黄瓜的创建者。 “世界”的目的是双重的: 隔离方案之间的状态。 在场景中的步

  • 我得到了这个错误: “变量'a'已赋值,但其值永远不可用”

  • 问题内容: 假设我有以下情况; 在重新标记的页面中,有一个链接将页面/ a定向到/ b。我尝试将变量a传递给页面/ b以重用它。我该怎么做这个Flask应用程序?我需要使用会话还是有其他解决方案? 问题答案: 如果要传递一些不需要用户查看或控制的python值,则可以使用会话: 会话的行为就像字典,并序列化为JSON。因此,你可以将可序列化JSON的任何内容放入会话中。但是,请注意,大多数浏览器不

  • 问题内容: 我有两个Angular控制器: 我无法使用内部,因为它是未定义的。但是,如果我尝试像这样传递它… 我得到一个错误。有谁知道如何做到这一点? 在做 也失败。 注意: 这些控制器彼此之间不嵌套。 问题答案: 在多个控制器之间共享变量的一种方法是创建服务并将其注入到要使用它的任何控制器中。 简单服务示例: 在控制器中使用服务: 这个博客对此进行了很好的描述(特别是第2课)。 我发现,如果要跨

  • 问题内容: 我在jenkins有两个工作,这两个工作都需要相同的参数。 如何使用参数运行第一个作业,以便在触发第二个作业时使用相同的参数? 问题答案: 您可以使用参数化触发器插件,该插件可让您将参数从一个任务传递到另一任务。 您还需要在上游添加从上游传递的此参数。