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

最佳答案

在Java版Cucumber(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确保方案之间不会共享状态泄漏,因为为每个方案都重新创建了注入(inject)的依赖关系。

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

要使Cucumber使用DI,您需要选择一种(也只有一种)DI集成,并将其包括在类路径中(或POM中)。选择范围为:
  • PicoContainer(cucumber-picocontainer.jar)
  • Guice(cucumber-guice.jar)
  • Weld (cucumber-weld.jar)
  • Spring(cucumber-spring.jar)
  • OpenEJB(cucumber-openejb.jar)

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

    07-24 19:19
    查看更多