gpt4 book ai didi

spring - 尽管有 `Annotations differs on glue classes found`,如何使用自己的 Spring 上下文配置来定义通用 Cucumber 步骤

转载 作者:行者123 更新时间:2023-12-03 17:38:13 29 4
gpt4 key购买 nike

我有一个用 Cucumber 测试过的应用程序,但是自从升级(Cucumber 1.1.6 到 1.2.5,java 1.6 到 1.8,Spring 3.2.0 到 4.2.6)它不再工作,因为它提示 Annotations differs on glue classes found
结构如下:

  • 一些需要一些属性值的常见 stepdef
  • 需要一些 @ContextConfiguration 的更具体的 stepdef

  • 这两个也应该共享一个bean。

    公共(public)部分永远不会单独运行。但是我有多个测试,每个测试都使用自己特定的 stepdefs。现在由于 Annotations differs on glue classes found 而拒绝运行.
    有没有办法让它运行而不用具体上下文的细节污染公共(public)上下文?

    步骤定义:
    @ContextConfiguration("classpath:cucumber-common.xml")
    public class CommonStepdefs {
    @Autowired
    private SharedBean sharedBean;
    @Value("${some.property}")
    private String someProperty;

    // actual step def methods
    }

    @ContextConfiguration("classpath:cucumber-concrete.xml")
    public class ConcreteStepdefs {
    @Autowired
    private SharedBean sharedBean;
    @Autowired
    private OtherBean otherBean;

    // actual step def methods
    }

    常见的 Spring 配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:com/example/cucumber-common.properties"/>
    <context:spring-configured/>
    <context:annotation-config/>

    <bean id="glueCodeScope" class="cucumber.runtime.java.spring.GlueCodeScope"/>
    <bean id="glueCodeScopeConfigurer" class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
    <map>
    <entry key="cucumber-glue" value-ref="glueCodeScope"/>
    </map>
    </property>
    </bean>

    <bean id="sharedBean" class="com.example.SharedBean" scope="cucumber-glue"/>
    </beans>

    另一个 Spring 配置(导入通用配置):
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <import resource="classpath:cucumber-common.xml"/>

    <context:spring-configured/>
    <context:annotation-config/>
    <context:component-scan base-package="com.example.rest"/>

    <!-- more bean definitions -->
    </beans>

    使用以下方式运行测试:
    @RunWith(Cucumber.class)
    @CucumberOptions(
    format = { "html:target/cucumber-html-report", "json:target/cucumber-json-report.json" },
    glue = { "com.example.common", "com.example.concrete" },
    monochrome = true,
    strict = true)

    最佳答案

    您可以使用qaf-gherkin这简化了这种要求的实现。使用 QAF,您可以在不使用 spring 的情况下实现。它还支持来自打包 jar 的步骤。如果您在一个包中有通用步骤,而在不同包中有特定于平台的步骤,则您的配置可能如下所示:

    step.provider.pkg=com.myapp.steps.common;com.myapp.steps.web

    如果你想一起运行,你可以在 TestNG xml 配置文件中指定如下:
    <test name="Test-web">
    <parameter name="step.provider.pkg" value="com.myapp.steps.common;com.myapp.steps.web" />
    <parameter name="scenario.file.loc" value="resources/features" />
    <classes>
    <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
    </classes>
    </test>
    <test name="Test-mobile">
    <parameter name="step.provider.pkg" value="com.myapp.steps.common;com.myapp.steps.mobile" />
    <parameter name="scenario.file.loc" value="resources/features" />
    <classes>
    <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
    </classes>
    </test>

    好处之一是,常见的步骤可以放在 jar 中,您可以在多个项目中共享。喜欢 Spring @Autowired , QAF 支持 @Inject注解。

    关于spring - 尽管有 `Annotations differs on glue classes found`,如何使用自己的 Spring 上下文配置来定义通用 Cucumber 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366605/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com