【问题标题】:Cucumber scenario errors when optional parameter isn't included in step步骤中未包含可选参数时的黄瓜场景错误
【发布时间】:2021-08-27 15:33:40
【问题描述】:

我的 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);

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

io.cucumber.core.exception.CucumberException: Step [Client {string} just received {int} {string}] 在 'com.me.ed.testtool.StepDef.clientJustReceivedRequestReject(java.lang .String,int,java.lang.String,java.lang.String...)'。 但是,小黄瓜步骤有 3 个参数:

  • “PC1”
  • 1
  • “请求拒绝” 步骤文本:客户端“PC1”刚刚收到 1 个“RequestReject” 在 io.cucumber.core.runner.PickleStepDefinitionMatch.arityMismatch(PickleStepDefinitionMatch.java:83) 在 io.cucumber.core.runner.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:42) 在 io.cucumber.core.runner.ExecutionMode$1.execute(ExecutionMode.java:10) 在 io.cucumber.core.runner.TestStep.executeStep(TestStep.java:92) 在 io.cucumber.core.runner.TestStep.run(TestStep.java:64) ...

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

【问题讨论】:

    标签: java cucumber bdd


    【解决方案1】:

    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) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      相关资源
      最近更新 更多