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
相关产品推荐
相关产品推荐

