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

升级Java17后,Cucumber无法使用Lambda表达式定义步骤的问题

解决Java 17升级后Cucumber Lambda步骤定义兼容问题

核心问题说明

Cucumber从7.0版本开始移除了独立的cucumber-java8模块,将Java 8+特性整合到主cucumber-java模块中;旧版本Cucumber因JDK版本兼容性限制,无法在JDK 12+环境中支持Lambda步骤。


解决方案步骤

1. 调整依赖配置

移除项目中旧的cucumber-java8依赖,仅保留7.x版本的cucumber-java:

  • Maven配置示例:
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>7.1.1</version>
    <scope>test</scope>
</dependency>
  • Gradle配置示例:
testImplementation 'io.cucumber:cucumber-java:7.1.1'

2. 适配Lambda步骤定义写法

Cucumber 7.x中,io.cucumber.java8.En接口仍可使用(已整合到cucumber-java模块),继续用Lambda定义步骤的示例代码:

import io.cucumber.java8.En;

public class OrderSteps implements En {
    private int itemQuantity;

    public OrderSteps() {
        Given("the cart contains {int} items", (Integer count) -> {
            itemQuantity = count;
        });

        When("I add {int} more items", (Integer addNum) -> {
            itemQuantity += addNum;
        });

        Then("the total should be {int} items", (Integer expected) -> {
            assert itemQuantity == expected;
        });
    }
}

3. 确保JDK编译配置正确

在构建工具中明确指定JDK 17作为编译和测试的目标版本,避免兼容性问题:

  • Maven pom.xml 配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.10.1</version>
            <configuration>
                <source>17</source>
                <target>17</target>
            </configuration>
        </plugin>
    </plugins>
</build>
  • Gradle配置:
java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

4. 备用方案:注解式步骤定义

如果Lambda写法仍有兼容问题,可切换到Cucumber标准注解式写法,这种写法在所有版本中稳定支持:

import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;

public class OrderSteps {
    private int itemQuantity;

    @Given("the cart contains {int} items")
    public void set_initial_item_count(Integer count) {
        itemQuantity = count;
    }

    @When("I add {int} more items")
    public void add_items_to_cart(Integer addNum) {
        itemQuantity += addNum;
    }

    @Then("the total should be {int} items")
    public void verify_total_item_count(Integer expected) {
        assert itemQuantity == expected;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:50:38