Spring Batch:如何在Cucumber Testing中实例化“Step”范围bean?

时间:2016-12-28 16:57:31

标签: spring cucumber spring-batch cucumber-jvm cucumber-junit

如何在Cucumber Testing中实例化Spring的“Step”范围bean?

SpringJUnit4ClassRunner使用@TestExecutionListeners来实例化步骤范围的bean以进行测试。

我正在尝试在Cucumber中获得此行为。 Cucumber使用@RunWith(Cucumber.class)

无论如何我们可以实例化步骤范围bean吗?

提前致谢

2 个答案:

答案 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采用相同的方法,也许我会编写一个超类并在超级构造函数中实现它。

如果您有任何疑虑,请告诉我。

再次感谢