Cucumber执行每个Scenario时实例化glue目录全部Java类是否为预期行为?
Cucumber 步骤定义类实例化逻辑说明
- 你观察到的现象是预期行为,Cucumber的类实例化规则如下:
- 运行测试时Cucumber会扫描所有配置的glue路径下的Java类,只要类中包含任意Cucumber注解标注的方法,包括步骤注解
@Given/@When/@Then、生命周期Hook注解@Before/@After/@AfterStep/@BeforeStep等,执行每个Scenario前都会实例化该类,和当前Scenario是否用到类中的方法无关。 - 你遇到的
OtherStepDef.java被实例化的原因就是类中存在@After全局Hook:Cucumber需要保证每个Scenario执行结束后都触发该Hook方法,因此必须提前实例化对应类,哪怕你运行的Scenario没有用到该类里的任何步骤定义。 - 注释掉
@After注解后类不再被实例化也符合上述规则:如果glue路径下的类没有标注任何Cucumber相关注解,Cucumber不会主动对其进行实例化。
- 运行测试时Cucumber会扫描所有配置的glue路径下的Java类,只要类中包含任意Cucumber注解标注的方法,包括步骤注解
- 如果需要避免不必要的类实例化,可以通过拆分glue路径、给Hook添加tag过滤规则的方式实现,只有匹配到对应tag的Scenario才会触发对应Hook,也就不会实例化不相关的Hook所在类。
你提到的Feature文件内容如下:
Feature: Is it Friday yet? Everybody wants to know when it's Friday Scenario: Sunday isn't Friday Given today is Sunday When I ask whether it's Friday yet Then I should be told "Nope" Scenario: Friday is Friday Given today is Friday When I ask whether it's Friday yet Then I should be told "TGIF"
内容的提问来源于stack exchange,提问作者pragun
相关产品推荐
相关产品推荐

