Lav*_*nia 5 cucumber gradle gherkin cucumber-jvm spring-boot
我们有一个 Spring Boot 应用程序,我们想从这个应用程序中开始执行 Cucumber 功能。每当用户单击 spring 应用程序中的按钮时,调用就会进入一个类 ( CucumberTestService),我们开始执行 Cucumber 功能。
以下是我们感兴趣的源代码结构:
- src
-main
-com
-bino
-panel
-server
-reference
-cucumber
-steps
-SendMessagesDefs.java
-CucumberTestService.java
Run Code Online (Sandbox Code Playgroud)
我们准备参数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"
};
Run Code Online (Sandbox Code Playgroud)
然后我们尝试通过以下方式启动它 - 与它在 中启动时完全一样cucumber.api.cli.Main:
run(args, Thread.currentThread().getContextClassLoader());
Run Code Online (Sandbox Code Playgroud)
现在这在我们的 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
Run Code Online (Sandbox Code Playgroud)
在尝试执行它时,Cucumber 似乎无法找到在glue 参数中定义的实现:
1 Scenarios (1 undefined)
7 Steps (7 undefined)
0m0.000s
我们花了相当多的时间来调查这个问题,并得出结论,"com.bino.panel.server.reference.cucumber.steps"当从 Spring Boot jar 执行它时,Cucumber 无法从这个路径找到类。但是当从 IDE(Eclipse、IntelliJ)执行相同的代码时,它们会被正确找到。
关于我们如何“帮助” Cucumber & Spring 在 Spring Boot jar 中找到胶水类的任何建议?
使用的 Jar 版本(取自我们的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')
Run Code Online (Sandbox Code Playgroud)
Spring Boot 版本是 2.1.3
任何帮助/建议/想法都非常感谢!非常感谢!
使用 Gradle,将 Cucumber 工件(即功能、步骤实现等)放入子项目中,例如my-cucumber-tests与 Spring Boot 应用程序分开。
然后在 Spring Boot 应用程序的 build.gradle 中添加:
bootJar {
// make backend, features, and steps available to Cucumber at runtime
requiresUnpack '**/my-cucumber-tests-*.jar', '**/cucumber-java-*.jar'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |