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

Cucumber(Java):如何在后续步骤中使用方法返回值?

解决Cucumber步骤间传递数据的问题

你遇到的问题核心是Cucumber的步骤方法之间不能直接通过返回值传递数据——它的执行逻辑是基于Feature文件的步骤定义匹配,而非普通方法调用的返回值传递逻辑。咱们来一步步修正你的代码:

问题分析

  1. 多余的@Test注解:Cucumber会通过@When/@Then这类专属注解识别步骤,JUnit的@Test在这里完全没必要,甚至会干扰步骤的正常执行。
  2. 错误的传值思路:想通过步骤方法的返回值给下一个步骤传数据是行不通的,Cucumber步骤间共享数据最常用的方式是用类的成员变量存储中间结果。
  3. 数据类型错误:用String直接比较金额大小逻辑不对,必须转成数字类型(比如int/double)才能做数值比较。

修正后的代码示例

public class learn_BDD { 
    // 定义成员变量,用来存储账户的初始金额,供后续步骤调用
    private int initialAccountAmount;

    @When("^I have \"([^\"]*)\" dollars on account$") 
    public void checkAccount(String amount){ 
        // 将获取到的账户值转成数字类型,存入成员变量
        initialAccountAmount = Integer.parseInt(Acount.checkValueOfAcount());
        // 无需返回值,直接通过成员变量共享数据
    } 

    @Then("^Check how much I spend$") 
    public void howMuchISpend(){ 
        // 获取当前账户状态,同样转成数字类型
        int actualValue = Integer.parseInt(Acount.actualAcountState()); 
        if (actualValue < initialAccountAmount) { 
            System.out.println("You spent money"); 
        } 
    } 
}

关键说明

  • 成员变量共享数据:Cucumber会为每个测试场景创建一个类实例,所以类里的成员变量可以在同一个场景的所有步骤间共享数据。
  • 适配数值比较:金额是数值类型,必须转换后才能做大小判断,避免字符串比较导致的逻辑错误(比如字符串"100"和"99"比较会认为"100"更小)。
  • 如果你的金额有小数,只需把int换成double,Integer.parseInt替换为Double.parseDouble即可。

内容的提问来源于stack exchange,提问作者Justi1991

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:32:02