我们有一个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
任何帮助/建议/想法都受到高度赞赏!非常感谢!
答案 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