spring - 有没有办法在另一个项目中重用来自多个项目的黄瓜步骤?
问题描述
我有 2 个微服务 A 和 B,它们在自己的项目中为它们定义了黄瓜测试。
服务A
@ContextConfiguration(classes = [AppConfiguration::class])
class ServiceAStepDefs @Autowired constructor(private var serviceAProfile: ServiceAProfile) : En {
//stepdefs live here
}
class AppConfiguration {
@Bean
fun serviceAProfileMaker(): ServiceAEnvironmentProfile {
val oktaConfig = DefaultOAuth2Config.getToken()
return ProfileManager.getEnvProfile(token)
}
}
服务乙
@ContextConfiguration(classes = [AppConfiguration::class])
class ServiceBStepDefs {
//stepdefs live here
}
@ComponentScan("com.hello.*")
class AppConfiguration {
@Bean
fun serviceBProfileMaker(): ServiceBEnvironmentProfile {
val token = DefaultOAuth2Config.getToken()
return ProfileManager.getEnvProfile(token)
}
}
在另一个项目 C 中,我想一起测试这两个服务。为此,我创建了一个 jar 文件,其中包含每个服务的步骤定义,并将它们作为依赖项拉入项目 C。
当我尝试使用服务 A 和服务 B 中的步骤从项目 C 运行黄瓜测试时,我看到一个问题,即在两个项目中都使用了 Spring 上下文,我猜这是正确的。
10:17:59.936 [DEBUG] [TestEventLogger] io.cucumber.core.backend.CucumberBackendException: Glue class class com.hello.serviceA.stepdefs.ServiceASteps and class com.hello.stepdefs.ServiceBSteps both attempt to configure the spring context. Please ensure only one glue class configures the spring context
有没有办法连接这两个服务,以便我可以为这两个服务配置 Bean 并重用这些步骤?
解决方案
使用cucumber-spring
Cucumber 时使用 Spring 的TestContextManager
框架。该框架使用单个类启动测试上下文。检查此类是否有任何配置应用程序上下文的注释,例如@ContextConfiguration
.
由于两个步骤定义都有这个注释,Cucumber 无法决定使用哪个,你会收到抱怨这个的错误。要解决这个问题,您应该确保只有一个胶水类具有@ContextConfiguration
注释。
Cucumber v5.6.0 添加了@CucumberContextConfiguration
这使得这更容易做到。
因此,您可能希望像这样构建您的项目:
a
|- config
| | AConfiguration with `@CucumberContextConfiguration` and `@ContextConfiguration(...)`
| | RunCucumberTest with `@CucumberOptions(extraGlue="a.steps")`
|- steps
| | ASteps
b
|- config
| | BConfiguration with `@CucumberContextConfiguration` and `@ContextConfiguration(...)`
| | RunCucumberTest with `@CucumberOptions(extraGlue="b.steps")`
|- steps
| | BSteps
c
|- config
| | CConfiguration with `@CucumberContextConfiguration` and `@ContextConfiguration(...)`
| | RunCucumberTest with `@CucumberOptions(extraGlue={"a.steps", "b.steps"})`
见:https ://github.com/cucumber/cucumber-jvm/tree/main/spring
推荐阅读
- c# - 为什么 Autofac.Integration.WebApi.Owin 5.0.0 在 TargetFramework v4.7.1 上引用 System.Net.Http 4.2.0?
- angular - 激活组件时重置组件变量
- python - 如何使“FileHandler”从日志消息中去除终端转义序列(颜色)?
- powershell - 有没有一种简单的方法可以输出到 xlsx?
- json - Jolt Transformation 将值放入错误的数组元素中
- awk - 需要使用 AWK 以相同的顺序打印列
- c - 局部静态变量如何在方法中工作?
- java - Spring Kafka BATCH ack 模式如何与非批处理侦听器一起使用?
- powershell - 如果没有新数据发布工件,如何参考以前的任务并停止在 azure devops 中构建
- android - 我如何在 Xamarin.android 应用程序中使用人脸身份验证。当用户打开应用程序时,它使用人脸身份验证作为登录名