我有一个简单的工作,在使用JUnit的集成测试中进行测试。我在我的作业上下文中定义了一个tasklet,并将其集成到Spring Batch作业bean中。但是,从未调用此tasklet的execute()方法,我不知道为什么。你知道为什么会这样吗?
我的工作环境:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<import resource="classpath*:/launch-context-test.xml" />
<batch:job id="testJob">
<batch:step id="testStep">
<batch:tasklet ref="myTasklet" />
</batch:step>
</batch:job>
<bean id="myTasklet" class="de.something.MyTasklet" scope="step" />
<bean id="jobLauncherTestUtils" class="org.springframework.batch.test.JobLauncherTestUtils" />
tasklet的实现方式如下:
public class MyTasklet implements Tasklet {
public MyTasklet() {
System.out.println("Tasklet initialized.");
}
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
System.out.println("Execute Tasklet.");
return RepeatStatus.FINISHED;
}
这是我的测试课程:
@ContextConfiguration
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
StepScopeTestExecutionListener.class, JobScopeTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
public class MyTest {
@Resource
private JobLauncherTestUtils jobLauncherUtils;
@Test
public void test1() throws Exception {
JobParameters params = new JobParametersBuilder(jobLauncherUtils.getUniqueJobParameters()).toJobParameters();
jobLauncherUtils.launchJob(params);
}
当我使用JUnit执行我的test1时,它只打印“Tasklet initialized”。到控制台。
答案 0 :(得分:2)
需要告诉JobLauncherTestUtils
要运行什么工作。您需要在配置中将作业注入其中,如下所示:
<bean id="jobLauncherTestUtils" class="org.springframework.batch.test.JobLauncherTestUtils">
<property name="job" ref="testJob"/>
</bean>