Spring Batch:单元测试后期绑定

时间:2015-01-21 14:29:58

标签: testing spring-batch late-binding

我的阅读器配置如下:

<bean name="reader" class="...Reader" scope="step">
    <property name="from" value="#{jobParameters[from]}" />
    <property name="to" value="#{jobParameters[to]}" />
    <property name="pageSize" value="5"/>
    <property name="saveState" value="false" /> <!-- we use a database flag to indicate processed records -->
</bean>

并对它进行测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:testApplicationContext.xml"})
@ActiveProfiles({"default","mock"})
@TestExecutionListeners( {StepScopeTestExecutionListener.class })
public class TestLeadsReader extends    AbstractTransactionalJUnit4SpringContextTests {

@Autowired
private ItemStreamReader<Object[]> reader;

public StepExecution getStepExecution() {
    StepExecution execution = MetaDataInstanceFactory.createStepExecution();
    execution.getExecutionContext().putLong("campaignId", 1);
    execution.getExecutionContext().putLong("partnerId", 1);

    Calendar.getInstance().set(2015, 01, 20, 17, 12, 00);
    execution.getExecutionContext().put("from", Calendar.getInstance().getTime());
    Calendar.getInstance().set(2015, 01, 21, 17, 12, 00);
    execution.getExecutionContext().put("to", Calendar.getInstance().getTime());
    return execution;
}

@Test
public void testMapper() throws Exception {
    for (int i = 0; i < 10; i++) {
        assertNotNull(reader.read());
    }
    assertNull(reader.read());
}

现在,虽然pageSize和saveState被正确地注入我的阅读器,但作业参数却没有。根据文档,这是它需要完成的所有事情,我发现的唯一问题是使用jobParameters [&#39;来自&#39;]而不是jobParameters [from]。知道什么可能是错的吗?

另外,在我的阅读器进入测试方法之前没有调用open(executionContext)方法,这是不行的,因为我使用这些作业参数来检索调用read方法时需要可用的一些数据。这可能与上述问题有关,因为关于使用后期绑定的测试的文档说&#34;读者被初始化并绑定到输入数据&#34;。

1 个答案:

答案 0 :(得分:0)

您正在将fromto设置为测试中的步执行上下文变量。但是在您的应用程序上下文配置中,您将其作为作业参数进行检索。您应该在单元测试中将它们设置为作业参数。

此外,如果要调用open / update / close ItemStream生命周期方法,则应执行该步骤。见http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/test/JobLauncherTestUtils.html#launchStep-java.lang.String-org.springframework.batch.core.JobParameters-