步骤中未包含可选参数时的黄瓜方案错误



在我的Cucumber应用程序中有这个步骤定义:

@Then("Client {string} just received {int} {string}")
@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);

当我运行带有步骤Then Client "PC1" just received 2 messages, a "RequestReject" and a "AdminHeartbeat"的场景时,测试通过了,没有问题。但是,如果我运行步骤Then Client "PC1" just received 1 "RequestReject的场景,我会得到以下错误:

io.cucumber.core.exception。黄瓜异常:步骤[Client {string}刚刚收到{int} {string}]在'com.me.ed.testtool.StepDef.clientJustReceivedRequestReject(java.lang.String,int,java.lang.String,java.lang.String…)'定义了4个参数。但是,gherkin步骤有3个参数:

  • "PC1">
  • 1
  • "RequestReject"步骤文本:Client "PC1"刚刚收到1个请求拒绝io.cucumber.core.runner.PickleStepDefinitionMatch.arityMismatch (PickleStepDefinitionMatch.java: 83)在io.cucumber.core.runner.PickleStepDefinitionMatch.runStep (PickleStepDefinitionMatch.java: 42)在执行io.cucumber.core.runner.ExecutionMode 1.美元(ExecutionMode.java: 10)io.cucumber.core.runner.TestStep.executeStep (TestStep.java: 92)io.cucumber.core.runner.TestStep.run (TestStep.java: 64)…

我如何解决这个问题,这样我就可以有一个不包含可选参数的步骤?

Java没有可选参数。Java有变量。它们有点像可选参数,但又不完全是。

所以你必须创建两个方法。如果您使用数据表,则更容易接受可变数量的消息。

Then Client "PC1" just received a "RequestReject"
Then Client "PC1" just received 2 messages:
| RequestReject  |
| AdminHeartbeat |
@Then("Client {string} just received a {string}")
public void clientJustReceived(String session, int numMessages, String message) {
clientJustReceivedRequestReject(session, 1, Collections.singletonList(message));
}
@Then("Client {string} just received {int} messages:")
public void clientJustReceived(String session, int numMessages, List<String> messages) {
}

最新更新