spring-boot - Cucumber Spring DI 两个 Step 类加载 Spring 上下文
问题描述
我正在使用 cucumber-spring 创建我的集成测试并使用 Spring 提供的 DI。完成方式:有一个单独的项目定义了所有必要的黄瓜依赖项:
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>${cucumber.version}</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
</dependency>
该项目还有一个带有 SpringBootTest 注释的基本测试类(允许加载应用程序上下文):
@RunWith(SpringRunner.class)
@SpringBootTest(
classes = {SomeBeans.class}
)
public class BaseTestStateSteps {
我将此项目添加为我项目的 pom 中的依赖项:
<dependency>
<groupId>com.externalproject</groupId>
<artifactId>spring-test-cucumber</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
然后我有我的跑步者课:
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty", "junit:target/cucumber/cucumber.xml", "json:target/cucumber/cucumber.json",
"html:target/cucumber/html/"},
tags = {"@Smoke"},
features = {"src/test/resources/features"},
glue = {"com.externalproject.steps","com.mycompany.steps"}
)
public class RunTestIT {
}
我也有我的 Step 课程:
public class MyTestSteps {
@Autowired
ClassToAutowire classToAutowire;
@Given("^I can do something$")
public void generateRandomPhoneNumber() {
classToAutowirer.doSomething();
}
所以我正在运行的问题: - 如果我没有用 SpringBootTest 或 ContextConfiguration 注释我的 RunTestIT - ClassToAutowire 为空(它不是自动装配的);- 如果我添加这些注释中的一个,我会遇到错误:
cucumber.runtime.CucumberException: Glue class class com.externalproject.steps.BaseTestStateSteps and class com.mycompany.steps.MyTestSteps both attempt to configure the spring context. Please ensure only one glue class configures the spring context
我需要来自外部项目的 Steps 功能(因此我不必从那里复制/粘贴并获取最新的功能更新),但我还需要自动装配来自我的 spring 上下文的依赖项。
我阅读了文章https://thepracticaldeveloper.com/2018/03/31/cucumber-tests-spring-boot-dependency-injection/ 但它只处理同一个项目中的多个步骤定义。
你有什么想法我可以解决这个问题吗?
解决方案
推荐阅读
- c++ - 查找数字交点 C++
- asp.net - 从 Razor 页面发布到 Web API 控制器总是返回 400 错误
- c - 从 C 中的函数返回值的问题
- django - 如何使用 drf 精确序列化和创建自定义用户
- php - 带有自定义用户提供程序的 Laravel 自定义失败登录消息
- python - Python从列表中的嵌套类创建字典
- python - Python 没有将来自 tkinter 的 Entry 小部件的用户输入存储到变量中
- aws-amplify - AWS 使用 NPM 而不是 Yarn 放大安装 Web 依赖项
- dataflow-diagram - 在数据流图中,2 个实体可以使用相同的流程(具有相同的传入数据流)吗?
- r - 修改/更正 R 中不正确的年份