Cucumber “cumber glue”范围和步骤成员变量之间有什么区别?

Cucumber “cumber glue”范围和步骤成员变量之间有什么区别?,cucumber,cucumber-spring,Cucumber,Cucumber Spring,首先,在步骤类中使用scopescope和实例化成员变量之间没有太大区别,而不是实例化代码所在的位置 例如,使用黄瓜胶范围: @Configuration public class MyConfiguration { @Bean @Scope("cucumber-glue") public MyContext myContext() { return new MyContext(); } } @SpringBootTest public class MySteps {

首先,在步骤类中使用
scope
scope和实例化成员变量之间没有太大区别,而不是实例化代码所在的位置

例如,使用
黄瓜胶
范围:

@Configuration
public class MyConfiguration {
  @Bean
  @Scope("cucumber-glue")
  public MyContext myContext() {
    return new MyContext();
  }
}

@SpringBootTest
public class MySteps {
  @Autowired
  private MyContext myContext;
}
与成员变量相比:

@SpringBootTest
public class MySteps {
  private final MyContext myContext = new MyContext();
}

我还缺少其他差异吗?

当您有多个定义文件时,您希望在它们之间共享一些信息。您可以通过写入同一组件来实现这一点


然而,所有常规组件都是单例范围的,并且在不同的场景之间仍然存在。这使得它们不适合共享测试状态。这可能会干扰下一个场景。幸运的是,
scoped组件(包括步骤定义)在场景之间循环使用。这将确保您的粘合代码始终保持新鲜。

我刚刚使用了一个调试器,对于非静态成员变量,它们将针对每个场景进行实例化(这与文档IIRC一致),与
cumber glue
-作用域bean相同。除非将步骤定义注入其他步骤定义并以这种方式访问它们,否则不能在步骤定义类之间共享成员变量。这不能很好地扩展。