`cucumber-glue` 范围和步骤成员变量有什么区别?

What are the differences between `cucumber-glue` scope and step member variables?

AFAICT,使用 cucumber-glue 范围和在步骤 类 中实例化成员变量之间没有太大区别,除了实例化代码所在的位置。

例如,使用cucumber-glue范围:

@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();
}

我还遗漏了其他差异吗?

当您有多个定义文件时,您会希望在它们之间共享一些信息。您可以通过写入同一组件来完成此操作。

然而,所有常规组件都是单例范围的,并且在场景之间存在。这使得它们不适合共享测试状态。它可能会干扰下一个场景。幸运的是 cucumber-glue 作用域组件(包括步骤定义)在场景之间循环使用。这确保您的胶水代码永远是新鲜的。