条件黄瓜步课程

问题描述 投票:0回答:1

我可能对 Cucumber 如何与 Spring 一起工作的机制有点了解,但我目前的理解是,如果类路径上有一个类,其中包含一些 Cucumber 钩子,Cucumber Spring 引擎会将该类/bean 添加到春天的背景。例如

class MySteps(val someDep: SomeDep) {
  @Before
  fun initialize() {
  }
}

有没有办法根据某些条件禁用此类的实例化,例如类路径上是否存在

SomeDep
类?我正在考虑与
@ConditionalOnClass
进行类比。理想情况下,我希望这个注释能够开箱即用,但显然事实并非如此。

用例是

MySteps
位于公司范围内的通用 Cucumber 库中(我可以对其进行修改),对于类路径上具有
SomeDep
的应用程序来说,它正是有意义的。

spring cucumber-jvm cucumber-java cucumber-junit
1个回答
0
投票

Cucumber 发现了“胶水路径”上的台阶。这通常默认整个类路径。粘合路径是一个包名称列表,Cucumber 应在其中查找步骤定义、挂钩等。

如果您将 Cucumber 与 JUnit 5 一起使用,您可以像通过

cucumber.glue
属性一样配置它:

import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;

@Suite
@IncludeEngines("cucumber")
@SelectPackages("io.cucumber.skeleton")
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "io.cucumber.skeleton")
public class RunCucumberTest {
}

没有其他机制可以控制哪些步骤定义可用。

请注意,人们过去曾尝试创建通用步骤库。 最引人注目的是阿斯拉克本人,但这并没有带来好的小黄瓜。

请考虑仅共享 API。如果足够丰富,步骤定义应该是一个非常薄的包装器。这为编写和实施测试的人员提供了更大的灵活性,因为他们可以使用更具表现力的上下文敏感语言。从维护的角度来看,用 Java 开发 API 也比用 Gherkin 开发一组公司范围的步骤定义更容易。除此之外,您还可以使用该 API 进行其他测试。

对于你的 API,你可能仍然想在每个场景之前在 Spring 中做一些事情。为此,您可以使用 Springs [测试执行侦听器][2]。

cucumber-spring
与 Spring
TestContextManager
集成,因此基本上应该按预期工作。

如果您想手动激活某些功能,可以使用

@CucumberContextConfiguration
注释。

@CucumberContextConfiguration
@TestExecutionListeners(...your test execution listeners)
@SpringBootTest
public class CucumberSpringConfiguration {

}
© www.soinside.com 2019 - 2024. All rights reserved.