当前位置: 首页 > 知识库问答 >
问题:

无法为方案步骤创建cucumber表达式

卫才哲
2023-03-14

我遇到了一个问题,我的自定义cucumber配置在同一个测试项目中工作,但在其他测试项目中不能作为依赖项工作

CustomTypeRegistry类:

public class CustomTypeRegistry {

    @ParameterType("customEx\\([0-9]+\\)")
    public Integer custom(String original) {
        return new Random().nextInt();
    }
}

Java胶步骤:

@When("generate {custom} for test")
public void testStep(int randomNumber) {
    System.out.println(randomNumber);
}

场景步骤:

When generate customEx(5) for test

当我在同一个项目中创建测试时,cucumber配置就出现了,这非常有效。

当我将项目打包到jar并将其作为依赖项添加到另一个测试项目时,它会识别步骤,但在运行时,我得到了错误:

17-11-2021 14:15:55.592[main]错误io.cucumber.core.runtime.Runtime.log-执行泡菜时的异常java.util.concurrent.执行异常:io.cucumber.core.exception.cucumber异常:无法为“生成{自定义}用于测试”创建cucumber表达式。您似乎没有注册参数类型。在java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)在java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)在io.cucumber.core.runtime.Runtime.run(Runtime.java:93)io.cucumber.core.cli.Main.run(Main.java:92)io.cucumber.core.cli.Main.main(Main.java:34)导致原因:io.cucumber.core.exception.Cucumber异常:无法为为测试生成{自定义}。您似乎没有注册参数类型。io.cucumber.core.stepexpression.StepExpressionFactory.registerTypeInConfiguration(StepExpressionFactory. java: 101)at io. cucumber. core. step表达式。在io. cucumber. core. step表达式中显示。创建表达式(StepExpress. java: 61)在IO. cucumber. core. step表达式。在io. cucumber. core. runner上创建表达式(StepExpress. java: 49)。在java. base/java. util.在io. cucumber. core. runner(ArrayList. java: 1540)。在io. cucumber. core. runner上的CachingGlue. preareGlue(CachingGlue. java: 243)。Runner. runPickle(Runner. java: 68)at io. cucumber. core. runtime。在io. cucumber. core. runtime. lambda$执行5美元(Runtime. java: 110)。在io. cucumber. core. runtime上的CucumberExecttionContext. runTestCase(CucumberExecttionContext. java: 117)。在java. base/java. util. con当前运行。执行器$RunnableAdapter. call(Executors. java: 515)在java. base/java. util. con电流。在io. cucumber. core. runtime上运行(FutureWork. java: 264)。运行时$SameThreadExecutorService.执行(Runtime. java: 233),在java. base/java. util. con当前。提交(AbstractExecutorService. java: 118)在io. cucumber. core. runtime。runtime. lambda$run2美元(Runtime. java: 86)在java. base/java. util. stream。在java. base/java. util. stream.接受(参考管道. java: 195)。在java. base/java. util.接受(SliceOps. java: 199)。ArrayList$ArrayListSpliterator. try Advance(ArrayList. java: 1631)在java. base/java. util. stream。在java. base/java. util. stream.在java. base/java. util. stream.在java. base/java. util. stream.在java. base/java. util. stream.在java. base/java. util. stream.在java. base/java. util. stream上评估(AbstractPipeline. java: 234)。在io. cucumber. core. runtime上收集(参考管道. java: 578)。运行时. run(Runtime. java: 87)...2个常见的帧被省略导致:io. cucumber. cucumberexpress。未定义参数类型{自定义}。请在io. cucumber. cucumberexpressions上注册一个参数类型。CucumberExpress.过程参数(CucumberExpress. java: 103)at io. cucumberexpress.cucumber表达。cucumberExpress. java: 35)at io. cucumberexpress.在io. cucumber. core. step表达式中创建表达式。StepExpressionFactory. crate表达式(StepExpressionFactory. java: 88)

cucumber版本:6.8.1

构建工具:Maven

什么会导致问题?

共有1个答案

薄瑞
2023-03-14

您可以观察到这种行为的可能原因是,有一个叫做“粘合路径”的东西,它基本上是cucumber查找代码(包括自定义参数定义)的包。

默认情况下,CuCumber使用作为包含runner类的包的粘合路径。所以我假设当您在原始项目中使用代码时,该条件已经满足。

但是,当您创建一个库并将其用作另一个项目中的依赖项时,Cucumber不再看到这一点,因为条件不再满足。

您需要手动指定粘合路径,就像文档中提到的那样

默认情况下,JVM将在runner类的包(或子包)中搜索。您还可以明确告诉JVM要搜索哪些包(和子包),方法是:

 @CucumberOptions(glue = {"<package>", "<package>", "<etc>"})
 public class RunCucumberTest{}
 类似资料:
  • 我要驱动执行的代码是: 因此,在一个实例中(当传入string=“have”时),我希望向我的方法中传入一个值,如objpolicyamendrequest.setcolor(“blue”); 另一个方法(当传递给string=“have not”时)我不想传递任何东西给这个方法。 我想我需要遵循if语句,但不确定Cucumber是否有帮助。 希望我说得有道理。我对编程还是有点陌生!

  • 我对cucumber和regex还不熟悉。我目前正在一个项目中使用cucumber core 7.2.0。 由于某种原因,我似乎无法在步骤定义中使用正则表达式。 例如,我有以下几点 然后是步骤定义类 虽然该功能发现发现的步骤定义很好,但当执行时,我得到以下结果 伊奥。cucumber朱尼特。UndefinedStepException:未定义步骤“我为testa30输入有效凭据”。您可以使用以下代

  • 自从我升级到最新的社区版IntelliJ 15.0.3以来,每当我使用alt-enter从功能定义文件自动生成步骤定义时,它都会以驼峰大小写而不是带下划线的常规样式创建方法。 例如,它过去是这样生成的 但现在它产生了通常的camelCase惯例: 有没有办法把这个设置改回第一种样式? 谢谢

  • 我对Cucumber JVM无法获取步骤定义有问题。我在Runner文件中确实有@CucumberOptions。我的功能文件也有@SmokeTest标签。这个问题仍然存在。请帮助!我已经尝试解决这个问题几天了。 Maven 和 Java 版本: Apache Maven 3.0.4Java版本:1.6.0_65,供应商:Apple Inc. 项目结构: 演示-- 运行器文件: 包com.smok

  • 我在项目中使用了Spring、Cucumber和Junit。测试运行程序带有注释,因此在运行套件之前,它会创建一个Spring上下文。 我希望Spring将步骤定义类实例化为Springbean,这样我就可以注入依赖项并在步骤中使用它们。可以通过将类声明为来完成。 到现在为止,一直都还不错。问题是Cucumber将再次实例化步骤定义,并且不会使用Spring已经创建的bean和注入的依赖项。 有什

  • TL:DR控制台不显示缺少步骤的步骤正则表达式 编辑:添加功能文件