You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cucumber执行每个Scenario时实例化glue目录全部Java类是否为预期行为?

Cucumber 步骤定义类实例化逻辑说明

  • 你观察到的现象是预期行为,Cucumber的类实例化规则如下:
    1. 运行测试时Cucumber会扫描所有配置的glue路径下的Java类,只要类中包含任意Cucumber注解标注的方法,包括步骤注解@Given/@When/@Then、生命周期Hook注解@Before/@After/@AfterStep/@BeforeStep等,执行每个Scenario前都会实例化该类,和当前Scenario是否用到类中的方法无关。
    2. 你遇到的OtherStepDef.java被实例化的原因就是类中存在@After全局Hook:Cucumber需要保证每个Scenario执行结束后都触发该Hook方法,因此必须提前实例化对应类,哪怕你运行的Scenario没有用到该类里的任何步骤定义。
    3. 注释掉@After注解后类不再被实例化也符合上述规则:如果glue路径下的类没有标注任何Cucumber相关注解,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:09:03