如何解决有没有办法在另一个项目中重复使用多个项目中的黄瓜步骤?
我有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)
}
}
服务B
@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 Context,我猜是正确的。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。