当前位置: 首页 > 知识库问答 >
问题:

Spring批处理:单元测试后期绑定

钱星辰
2023-03-14

我的阅读器配置如下:

<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());
}

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

共有1个答案

从元明
2023-03-14

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

另外,如果希望调用Open/Update/CloseItemStream生命周期方法,则应该执行该步骤。参见http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/test/joblaunchertestutils.html#launchstep-java.lang.string-org.springframework.batch.core.jobparameters-

 类似资料:
  • 点对点的测试被定义为测试从开始到结束完整的运行一个批处理任务。它允许一个测试设置一个测试条件,执行任务,并且验证最后的结果。 在下面的这个例子中,这个批处理任务从数据库读取数据并且写入一个平面文件中。这个测试方法首先要建立数据库与测试数据。它清空CUSTOMER表然后往里面插入10条新的记录。测试然后启动任务使用launchJob()方法,这个launchJob()方法是由JobLauncherT

  • 假设我有一个像这样配置的简单任务: 当抛出MyRetryableException时,我重试了15次,但最后我得到了

  • 我正在处理一个使用Spring批处理的项目。在本项目中,我使用Spring批处理后期绑定,其中我使用JobParameters注入了一个参数(将用作SQL读取器查询的条件的字符串)。目前,我正在使用进行后期绑定,所有操作都非常正常。 这里我要问的是何时使用以及何时使用。我已经阅读了Spring批处理参考文件,并在谷歌上搜索了StepScope和jobscope。我得到的只是: a.StepScop

  • 我正在寻找一些关于测试Spring批处理步骤和步骤执行的一般性意见和建议。 我的基本步骤是从api读入数据,处理实体对象,然后写入数据库。我已经测试了快乐之路,这一步成功地完成了。我现在想做的是在处理器阶段数据丢失时测试异常处理。我可以单独测试processor类,但我更愿意测试整个步骤,以确保在步骤/作业级别正确反映流程故障。 我已经阅读了spring批量测试指南,如果我是诚实的,我对它有点迷茫

  • 当springbatch试图获得到元数据表的连接时,我们的应用程序中会周期性地出现错误。似乎我们在某个地方或某种程度上存在泄漏,无法释放或关闭连接。 我正在寻找的是一些方法,当Spring Batch日志从池中获取连接时,释放连接回到池中,等等。然后我们可以试着确定漏洞在哪里。

  • 问题内容: 我正在尝试为程序中用来验证表单的简单bean编写单元测试。Bean带有注释,并具有使用初始化的类变量 我想为此类中的验证方法编写单元测试,但是,如果可能的话,我希望在不利用属性文件的情况下这样做。我这样做的原因是,如果我从属性文件中提取的值发生更改,我希望这不会影响我的测试用例。我的测试用例正在测试验证值的代码,而不是值本身。 有没有一种方法可以在测试类中使用Java代码来初始化Jav