导入具有 @CucumberContextConfigurations 的多个依赖项以利用其步骤定义会导致“CucumberBackendException”

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

我已经和这个问题斗争了两天了,但我想已经没有选择了。我不是 Cucumber 或 Gradle 方面的专家,但由于我的专业领域很接近(Java/Spring/Maven),所以我一直致力于将多个基于 Gradle 的 Cucumber 项目更新到所用框架的最新版本。我面临的问题之一是

io.cucumber.core.backend.CucumberBackendException: Please annotate a glue class with some context configuration.
我通过为每个项目添加一个这样的类来解决它,如下所示:

@CucumberContextConfiguration
@ContextConfiguration("classpath:cucumber.xml")
public class CucumberSpringConfiguration
{

}

这些配置已添加到步骤定义所在的相同包中,否则它是不可见的,因为步骤定义是通过测试运行器中的

glue
注释的
@CucumberOptions
属性指定的。

所以这一切都在这些项目中起作用,直到我开始将它们组合在一起作为依赖项。想象一下:项目 A 有一些步骤定义,并定义了其

CucumberSpringConfiguration
类。项目 B 有自己的步骤定义,并在与其步骤定义相同的包中定义了自己的
CucumberSpringConfiguration
类。现在,项目 C 导入 A 和 B 作为其依赖项,以利用步骤定义进行端到端测试。问题就出现在这里:

io.cucumber.core.backend.CucumberBackendException: Glue class class com.projectA.core.stepdef.CucumberSpringConfiguration and class com.projectB.core.stepdef.CucumberSpringConfiguration are both (meta-)annotated with @CucumberContextConfiguration.
Please ensure only one class configures the spring context

有什么方法可以解决这个问题?我想过像这样从类路径中排除那些(在 build.gradle 中),但没有成功:

tasks.withType(Test) {
    excludes = ['**/CucumberSpringConfiguration**']
    doFirst {

        // Get the current classpath
        def classpath = sourceSets.test.runtimeClasspath

        // Filter out the specific class file I want to exclude
        classpath = classpath.filter { file ->
            !file.absolutePath.contains("CucumberSpringConfiguration")
        }

        // Set the modified classpath
        setClasspath(files(classpath))
    }
}

我尝试将依赖项项目中的 CucumberSpringConfiguration 移出该步骤定义包,但由于它在测试运行程序中的

glue
注释的
@CucumberOptions
参数中使用,因此它抱怨有必要拥有一个。

这里非常需要 Cucumber/Gradle 专家的帮助!提前非常感谢!

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

项目 A、B 和 C 各需要一个运行器类和一个在胶水路径上用

@CucumberContextConfiguration
注释的类。但他们不应该与其他项目共享这些课程。

因为您正在创建一个库,所以保存在

src/main
中的生产代码是共享的,但保存在
src/test
中的测试代码不是共享的。因此,粘合代码进入
src/main
,运行程序和带注释的类进入
src/test

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