如何在Cucumber Testing中实例化Spring的“Step”范围bean?
SpringJUnit4ClassRunner使用@TestExecutionListeners来实例化步骤范围的bean以进行测试。
我正在尝试在Cucumber中获得此行为。 Cucumber使用@RunWith(Cucumber.class)
无论如何我们可以实例化步骤范围bean吗?
提前致谢
答案 0 :(得分:1)
我不熟悉Cucumber,但我使用@RunWith(SpringJUnit4ClassRunner.class)
我建议您在StepScopeTestExecutionListener.class
注释中添加DependencyInjectionTestExecutionListener
以及@TestExecutionListeners
(如果您正在注入任何依赖关系),例如@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class })
为了在测试类中实例化步骤范围bean,首先使用ExecutionContext
获取MetaDataInstanceFactory
的实例。
例如:
ExecutionContext executionContext = MetaDataInstanceFactory.createJobExecution().getExecutionContext();
一旦您拥有ExecutionContext
的实例,您就需要使用JobLauncherTestUtils
类(文档:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/test/JobLauncherTestUtils.html)。您可以通过调用launchStep()
启动一个步骤,例如:
jobLauncherTestUtils.launchStep(<step_name>, <job_parameters>, <execution_context>);
希望有所帮助!
答案 1 :(得分:0)
通过探索一些选项,我现在已经可行了。
以下是我的解决方法
Bean配置
@Bean(name = "abc")
@StepScope
public ABC getABC(){
return new ABC();
}
@ContextConfiguration(classes = AppConfiguration.class, loader = AnnotationConfigContextLoader.class)
public class StepDef {
@Autowire
ABC abc;
public StepDef{
StepExecution stepExecution = getStepExecution();
StepSynchronizationManager.register(stepExecution);
}
}
我不确定这个实现有多正确。我已初始化StepExecution以在stepDef构造函数中加载我的配置,因此我的AutoWiring可以正常工作,我可以对它运行我的测试。
我需要对所有stepDef采用相同的方法,也许我会编写一个超类并在超级构造函数中实现它。
如果您有任何疑虑,请告诉我。
再次感谢