【问题标题】:Multiple steps for same cucumber step definition同一黄瓜步骤定义的多个步骤
【发布时间】:2018-05-10 12:37:29
【问题描述】:

有谁知道 cucumber/Java 是否支持多步骤访问同一个 stepDefinition 的功能?

我想要实现的是使用一个 Given 一个步骤,该步骤目前被用作一个 When(在另一个更复杂的测试中,当前的 When 只是一个先决条件)

根据我以前的经验 (Specflow/.Net),我可以使用类似的东西

[Given(@"the user added a (.*) to the cart")]
[When(@"the user adds a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string product){
    ////code that adds to the cart
}

如果我使用与 Specflow 中相同的方法,则会引发 DuplicateStepDefinitionException。 因为在将步骤与步骤定义匹配时,Cucumber 没有考虑关键字(Given、When 等)。 Cucumber 只在步骤定义中寻找一个正则表达式,所以我只需要一个步骤定义(给定或何时)。意义

[When(@"the user adds a (.*) to the cart")]

也会匹配

[Given(@"the user adds a (.*) to the cart")]

我的问题是我们使用过去时的 Given 和现在时的 When。

所以问题是:如何对两个步骤定义使用相同的实现?

我看到的唯一解决方案是将实现 Given 的方法的包含提取到另一个方法中,并在 Given 步骤定义和 When.Something 下调用它:

[Given(@"the user added a (.*) to the cart")]
public void GivenTheUserAddedATotheCart(string product){
    addToTheCart(product);
}

[When(@"the user adds a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string product){
    addToTheCart(product);
}

public void addToTheCart(String product){
////code that adds to the cart
}

...但我真的不觉得这是一个很好的解决方案

【问题讨论】:

  • 我知道这不是在回答您的问题,但以防万一,如果您想切换到(IMO 高级)组合 Python-Behave,那么您可以使用通用 STEP 关键字代替 GIVEN , WHEN 或 THEN。

标签: cucumber


【解决方案1】:

我在 cucumber repo 中发现了多个围绕这个主题的讨论,但其中大多数都是特定于 cucumber-jvm 实现的:

这是一个有争议的话题,据我所知,尚未实现对此功能的官方支持,但有一些关于如何实现此功能的参考资料。在显示的示例中,由于步骤相似,我将扩展步骤定义上的正则表达式以匹配两个步骤:

[Given(@"the user add(s|ed) a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string tense, string product){
    ////code that adds to the cart
}

当然,这个解决方案会在方法上产生一个额外的参数,除非您计划在过去(Given)或现在(When)执行该步骤时遵循不同的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多