所以我最近开始研究 Cucumber 并一直面临这个问题。
如您所见,这是我的 Spring Boot 应用程序(AcceptanceTests)中的子模块,因此其中没有主要方法。
这是我的
CucumberSpringContextConfiguration
课
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@CucumberContextConfiguration
public class CucumberSpringContextConfiguration {
}
这是我的
CucumberIntegrationTest
课
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src\test\resources\feature",
plugin = {"pretty", "html:target\\cucumber"},
glue = "com.#####.########.cucumberspringboot.cucumberglue"
)
public class CucumberIntegrationTest {}
我尝试使用主类(src/main/java)运行此代码,代码编译成功。但由于这不是我的要求,我删除了它,现在我遇到了以下错误 -
SEVERE: Exception while executing pickle
java.util.concurrent.ExecutionException:
io.cucumber.core.backend.CucumberBackendException: Please annotate a
glue class with some context configuration.
For example:
@CucumberContextConfiguration
@SpringBootTest(classes = TestConfig.class)
public class CucumberSpringConfiguration { }
Or:
@CucumberContextConfiguration
@ContextConfiguration( ... )
public class CucumberSpringConfiguration { }
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at io.cucumber.core.runtime.Runtime.run(Runtime.java:93)
at io.cucumber.core.cli.Main.run(Main.java:92)
at io.cucumber.core.cli.Main.main(Main.java:34)
Caused by: io.cucumber.core.backend.CucumberBackendException:
Please annotate a glue class with some context configuration.
请建议如何在不使用主类的情况下实现此目的。
io.cucumber.core.cli.Main.run(Main.java:92) at io.cucumber.core.cli.Main.main(Main.java:34)
堆栈跟踪的这一部分显示您正在使用 Cucumber CLI,而不是
CucumberIntegrationTest
。所以您可能正在通过 IDEA 运行您的功能文件。大概您单击了功能文件装订线中的绿色播放图标。
不幸的是 Intelij IDEA 做出了一些假设和错误的猜测。如果您查看创建的运行配置,您将看到有一个带有
--glue
参数的命令行,该参数可能指向 features
。您必须手动更改此设置。
目前无需猜测
--glue
参数,我已经要求 Intelij IDEA 背后的团队在 IDEA-243074 修复此问题,但迄今为止该问题的关注度为零。你可以投票,也许会发生一些事情。
您还可以通过将功能文件放在不同的位置(例如,
src/test/resources/com/#####/########/cucumberspringboot
。因为这是 cucumberglue
Ingelij IDEA 的父包,不太可能把事情搞砸。
另请注意:您当前正在使用 JUnit 4 来运行 Cucumber。 Spring Boot 更喜欢使用 JUnit 5。您应该使用 Cucumber JUnit Platform Engine。 您可以在此处找到最小示例。
您需要添加
@ContextConfiguration(classes = {YourSpringClass.class})
,以便当 Cucumber 上下文启动时,它会随之启动您的 Spring 项目。
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@CucumberContextConfiguration
@ContextConfiguration(classes = {YourSpringClass.class})
public class CucumberSpringContextConfiguration {
}
PS:我遇到了同样的问题并已解决。