Tengo una aplicación por lotes complicada, y quiero probar que mis suposiciones sobre el flujo son correctas.¿Cuál es la mejor manera de probar el flujo de trabajo en Spring-Batch?
Aquí es una versión muy simplificada de lo que estoy trabajando con:
<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 es el trabajo que quiero probar. Realmente solo quiero probar la transición de step2.master a step3 o step4. No deseo probar step1 en absoluto ...
Sin embargo, quiero mantener la especificación de Job1 intacta, ya que esta prueba está probando la configuración, no las acciones subyacentes. Ya tengo pruebas de aceptación para probar cosas de extremo a extremo. Este ejemplo es para poder escribir pruebas específicas para pequeñas variaciones sin crear pruebas separadas de extremo a extremo para cada caso de borde.
Lo que quiero probar es que cuando el trabajo dentro del paso 2 falla, step2.master me enviará al paso 4 y no al paso 3. ¿Hay una buena manera de probar esto?
Pero, ¿y si el paso 1 es una acción muy compleja que no quiero probar, y hay otras acciones complejas que no se representan en este ejemplo? Básicamente, SÓLO quiero probar que un error dentro del trabajo particionado me enviará al siguiente paso correcto, y no a ninguna de las otras cosas que están sucediendo. –
Puede reemplazar los trabajos complejos con implementaciones simuladas que solo proporcionan lo que sea necesario para el próximo trabajo (si hay alguna dependencia). Por ejemplo, supongamos que step1 lee un archivo db y genera un archivo en una carpeta. Reemplace eso con un simulacro que mueve un archivo de prueba a la carpeta de salida. – esmiralha
Así que básicamente debería crear una segunda configuración para verificar si otra configuración funcionaría ... Sí, puedo verificar fácilmente que "alguna" configuración funciona ... ¿puedo verificar fácilmente que mi configuración específica funciona? –