从Spring Boot应用启动的黄瓜未在罐子中找到胶水类

时间:2019-04-16 11:51:22

标签: spring-boot gradle cucumber cucumber-jvm gherkin

我们有一个Spring Boot应用程序,我们想从该应用程序中开始执行Cucumber功能。 每当用户单击spring应用程序中的按钮时,该调用就会进入一个类(CucumberTestService)中,在该类中我们开始执行Cucumber功能。

以下是我们感兴趣的源代码结构:

    - src
        -main
            -com
                -bino
                    -panel
                        -server
                            -reference
                                -cucumber
                                    -steps
                                        -SendMessagesDefs.java
                                    -CucumberTestService.java

我们在CucumberTestService中准备参数:

   String[] args = new String[]{
                "--strict",
                "--glue",
                "com.bino.panel.server.reference.cucumber.steps",
                "--plugin",
                "pretty",
                "/CUCUMBER-FEATS/" + feature + ".feature",
                "--plugin",
                "json:" + reports_path + "/cucumber-reports-" + feature + "/Cucumber.json",
                "--plugin",
                "junit:" + reports_path + "/cucumber-reports-" + feature + "/Cucumber.xml",
                "--plugin",
                "html:" + reports_path + "/cucumber-reports-" + feature,
                "--plugin",
                "usage:" + reports_path + "/cucumber-reports-" + feature + "/cucumber-usage.json",
                "--plugin",
                "pretty:" + reports_path + "/cucumber-reports-" + feature + "/cucumber-pretty.txt"
        };

然后,我们尝试通过以下方式启动它-与在cucumber.api.cli.Main中启动的方式完全一样:

    run(args, Thread.currentThread().getContextClassLoader());

现在,这在我们的IDE(Eclipse和IntelliJ)中可以正常工作,但是当我们将其包装在spring boot jar中时,它将停止工作。

对于部署,整个应用程序捆绑在一个jar中,并具有以下结构:

    - BOOT-INF
        -classes
            -com
                -bino
                    -panel
                        -server
                            -reference
                                -cucumber
                                    -steps
        -lib
    - META-INF
        MANIFEST.ML
    - org
        -springframework
            -boot
                -loader

在尝试执行它时,Cucumber似乎无法找到胶水参数中定义的实现:

1 Scenarios (1 undefined) 7 Steps (7 undefined) 0m0.000s

我们花了很多时间调查这个问题,并得出结论,黄瓜无法找到 从Spring Boot jar执行此路径"com.bino.panel.server.reference.cucumber.steps"中的类时。 但是,当从IDE(Eclipse,IntelliJ)执行相同的代码时,可以正确找到它们。

关于我们如何“帮助” Cucumber&Spring在弹簧靴子罐子内找到胶水类的任何建议?

使用的原始版本(摘自我们的build.gradle文件):

    - compile group: 'io.cucumber', name: 'gherkin', version: '6.0.14'
    - compile(group: 'info.cukes', name: 'cucumber-java8', version: '1.2.5')
    - compile(group: 'io.cucumber', name: 'cucumber-junit', version: '4.2.6')
    - compile(group: 'io.cucumber', name: 'cucumber-picocontainer', version: '2.4.0')

Spring Boot版本为2.1.3

任何帮助/建议/想法都受到高度赞赏!非常感谢!

1 个答案:

答案 0 :(得分:0)

使用Gradle,将Cucumber工件(即功能,步骤实现等)放入与Spring Boot应用程序分开的子项目中,例如package com.example.homes; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication public class HomeApplication { public static void main(String[] args) { SpringApplication.run(HomeApplication.class, args); System.out.println("Inside main"); } }

然后在Spring Boot应用程序的build.gradle中,添加:

my-cucumber-tests