【问题标题】:Cucumber step definition with asterisk带星号的黄瓜步骤定义
【发布时间】:2022-01-15 01:30:54
【问题描述】:

我们的功能文件经过长时间的测试来验证用非英语语言编写的多个内容,Given -> When -> Then 结构没有意义。 我尝试用* 替换功能文件关键字,效果很好,但问题如下:

  1. 当以* Some step 的形式编写新步骤并使用 Alt->Enter 快捷方式生成步骤定义时,IntelliJ IDEA 不会... 什么都没有。它只打开我想要放置定义的文件,而不添加任何代码。我已将 IDE 和插件更新为最新版本。
  2. 似乎没有任何方法可以将“通用”注释用于星号步骤,只有GivenWhenThenAndBut 存在。拥有* Some step 功能和@Given("Some step") 定义不太符合逻辑。

有什么我可以使用的解决方法吗?

【问题讨论】:

  • 听起来您可能想向 Cucumber 提交功能请求,以获得通用步骤定义注释。类似@Step.
  • 听起来你应该向 IDEA 提交错误报告。
  • 不确定,但既然第二个意见正是我的想法,那么也许我会这样做,谢谢。仍然会留下问题,以防同时有人提出解决方法。
  • 您使用的自然语言是什么?还有你用的黄瓜版本是什么?
  • @AlexeyR。 - 拉脱维亚语。而黄瓜版本是6.10.4。

标签: java cucumber cucumber-jvm gherkin cucumber-java


【解决方案1】:

我认为您可以通过几个编码步骤来实现这一点。

  1. 假设您有这样的场景:
Feature: Generic annotation

  Scenario: Testing annotations
    * having asterix
    * use custom generic annotation
  1. 向您的来源添加自定义注释
package click.webelement.cucumber;

import io.cucumber.java.StepDefinitionAnnotation;
import io.cucumber.java.StepDefinitionAnnotations;
import org.apiguardian.api.API;
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@StepDefinitionAnnotation
@Documented
@Repeatable(MyStep.MySteps.class)
@API(status = API.Status.STABLE)
public @interface MyStep {

    String value();

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @StepDefinitionAnnotations
    @Documented
    @interface MySteps {
        MyStep[] value();
    }
}
  1. 现在在您的步骤定义中使用它
package click.webelement.cucumber;

public class StepDef {

    @MyStep("having asterix")
    public void doOne(){
        System.out.println("Running having asterix");
    }

    @MyStep("use custom generic annotation")
    public void doTwo(){
        System.out.println("Running use custom generic annotation");
    }

}

UPD

为了使您的 Idea 插件与您的自定义注释一起使用,您需要将该注释放置到

io.cucumber.java.LANG 包,其中 LANG 是您选择的语言的子包。

为了让一切都按默认方式运行,请将其放置到

io.cucumber.java.en

【讨论】:

  • 这个功能按我的预期工作,很好,但是 - IntelliJ IDEA 不理解功能文件中的这一步与其定义之间的联系,它显示Undefined step reference 警告,控制+单击不t 导航到该步骤,Create step definition 意图不起作用。任何想法如何补救?
  • 是的,很遗憾,idea 不适用。它的插件需要标准注释集
  • @Arcca 我知道如何克服这个问题,但我会在今天晚些时候进行测试。
  • @Arcca 我设法让它工作。查看我的更新。
  • 这大约是我想要的完整功能的 95%,非常感谢!现在只缺少步骤生成,但我可以忍受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多