Каков наилучший способ проверить поток работ в Spring-Batch? - PullRequest
5 голосов
/ 02 ноября 2010

У меня сложное пакетное приложение, и я хочу проверить, верны ли мои предположения относительно потока.

Вот очень упрощенная версия того, с чем я работаю:

<beans>
  <batch:job id="job1">
    <batch:step id="step1" next="step2">
      <batch:tasklet ref="someTask1"/>
    </batch:step>
    <batch:step id="step2.master">
      <batch:partition partitioner="step2Partitioner"
            step="step2" />
      <batch:next on="*" to="step3" />
      <batch:next on="FAILED" to="step4" />
    </batch:step>
    <batch:step id="step3" next="step3">
      <batch:tasklet ref="someTask1"/>
    </batch:step>
    <batch:step id="step4" next="step4">
      <batch:tasklet ref="someTask1"/>
    </batch:step>
  </batch:job>
  <batch:job id="job2">
    <batch:step id="failingStep">
      <batch:tasklet ref="failingTasklet"/>
    </batch:step>
  </batch:job>

  <bean id="step2Partitioner" class="org.springframework.batch.core.partition.support.MultiResourcePartitioner" scope="step">
    <property name="resources" value="file:${file.test.resources}/*" />
  </bean>

  <bean id="step2" class="org.springframework.batch.core.step.job.JobStep">
    <property name="job" ref="job2" />
    <property name="jobLauncher" ref="jobLauncher" />
    <property name="jobRepository" ref="jobRepository" />
  </bean>
</beans>

Job1 - это работа, которую я хочу проверить. Я действительно только хочу проверить переход step2.master к step3 или step4. Я вообще не хочу проверять шаг 1 ...

Однако я хочу сохранить спецификацию Job1 без изменений, так как этот тест проверяет конфигурацию, а не основные действия. У меня уже есть приемочные тесты для тестирования сквозного материала. В этом примере я могу написать целевые тесты для небольших вариантов без создания отдельных сквозных тестов для каждого пограничного случая.

Что я хочу проверить, так это то, что при сбое задания внутри шага 2 step2.master направит меня на шаг 4, а не на шаг 3. Есть ли хороший способ проверить это?

Ответы [ 2 ]

8 голосов
/ 02 ноября 2010

Вы можете заменить step2 фиктивной реализацией, которая всегда терпит неудачу, и использовать StepExecutionListener, чтобы проверить, были ли вызваны step3 и step4.

Здесь есть хорошие примеры: http://static.springsource.org/spring-batch/reference/html/testing.html#endToEndTesting

3 голосов
/ 18 сентября 2012

Вы можете проверить каждый шаг отдельно.Пример:

JobLauncherTestUtil jobLauncherTestUtil = new JobLauncherTestUtil();
jobLauncherTestUtil.setJobLauncher(jobLauncher);
jobLauncherTestUtil.setJob(job);
jobLauncherTestUtil.setJobRepository(jobRepository);
Map<String, JobParameter> params = Maps.newHashMap();
//determine job params here:
params.put(....);
JobParameters jobParams = new JobParameters(params);
ExecutionContext context = new ExecutionContext();
//put something to job context, if you need.
context.put(...);
JobExecution jobExecution = jobLauncherTestUtil.launchStep("stepId",jobParams,context);

Assert.assertEquals("Step stepId failed", ExitStatus.COMPLETED, execution.getExitStatus())

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...