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

Cucumber场景未包含可选参数时执行报错如何解决

问题原因

Cucumber 的 Java 实现不会自动为方法的可变参数(String...)补空数组,你将两个步骤注解绑定到同一个方法上时:

  • 第一个短步骤注解 @Then("Client {string} just received {int} {string}") 只会捕获 3 个入参
  • 但目标方法要求至少传入 4 个参数(最后一个可变参数即使是空数组,也会占用一个参数位)
    参数数量不匹配,因此抛出异常。
解决方案

拆分两个独立的步骤方法,分别绑定对应的步骤注解,短步骤的方法直接调用原有逻辑即可:

// 绑定短步骤,3个入参
@Then("Client {string} just received {int} {string}")
public void clientJustReceivedSingleMessage(String session, int numMessages, String message) throws InterruptedException {
    // 调用原有方法,额外消息传空数组
    clientJustReceivedRequestReject(session, numMessages, message);
}

// 保留原有长步骤的绑定和逻辑
@Then("Client {string} just received {int} messages, a {string} and a {string}")
public void clientJustReceivedRequestReject(String session, int numMessages, String message, String... additionalMessages) throws InterruptedException{
    receiver = new TcpClientReceiver(socketMap.get(session),properties,sessionsList.stream().filter(s->s.getName().equalsIgnoreCase(session)).findFirst().get(), new GlobalStatistics());
    List<String> messagesList=new ArrayList<>();
    messagesList.add(message);
    if (additionalMessages.length > 0) {
        Arrays.stream(additionalMessages).forEach(messagesList::add);
    }
    List<Message> messages=receiver.scanForMutlipleMessages(messagesList,"35");
    assertTrue(messages.size()==numMessages);
}

修改后两个步骤都会正常匹配对应方法,不会再出现参数数量不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03