如何使用自己的Spring上下文配置来获得常见的Cucumber步骤定义,尽管`注释在找到的胶水类上有所不同’
作者:互联网
我有一个用Cucumber测试的应用程序,但自从升级(Cucumber 1.1.6到1.2.5,java 1.6到1.8,Spring 3.2.0到4.2.6)它不再有用,因为它抱怨Annotations在胶水类上有所不同发现
结构如下:
>一些需要一些属性值的常见stepdef
>更具体的stepdef,需要一些@ContextConfiguration
这两个都应该共享一个bean.
共同部分永远不会自行运行.但我有多个测试,每个测试都使用自己特定的stepdef.现在拒绝运行,因为Annotations在找到的胶水类上有所不同.
有没有办法让它运行而不会污染具体上下文细节的共同上下文?
步骤定义:
@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,您无需使用弹簧即可实现.它还支持打包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,cucumber,cucumber-java 来源: https://codeday.me/bug/20190710/1428112.html