Cucumber(Java):如何在后续步骤中使用方法返回值?
解决Cucumber步骤间传递数据的问题
你遇到的问题核心是Cucumber的步骤方法之间不能直接通过返回值传递数据——它的执行逻辑是基于Feature文件的步骤定义匹配,而非普通方法调用的返回值传递逻辑。咱们来一步步修正你的代码:
问题分析
- 多余的
@Test注解:Cucumber会通过@When/@Then这类专属注解识别步骤,JUnit的@Test在这里完全没必要,甚至会干扰步骤的正常执行。 - 错误的传值思路:想通过步骤方法的返回值给下一个步骤传数据是行不通的,Cucumber步骤间共享数据最常用的方式是用类的成员变量存储中间结果。
- 数据类型错误:用
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
相关产品推荐
相关产品推荐

