我有一个使用弹簧批处理的应用程序。我想编写一个可以端到端测试批处理作业的测试用例。我一直在探索相同的各种选择。我检查了 concordion 测试用例是否有用,但我不确定它是否是测试 spring-batch 作业的理想方法。到目前为止,我认为集成测试用例应该最适合我的情况。我想知道测试我的场景的理想方法应该是什么。
<batch:job id="batch-job">
<batch:step id="cleanupData" next="populateExchRates">
<batch:tasklet ref="dataCleanupTasklet" />
</batch:step>
<batch:step id="populateExchRates" next="populateCache">
<batch:tasklet ref="populateExchRatesDBTasklet" />
</batch:step>
<batch:step id="populateCache" next="ExternalDbQuery">
<batch:tasklet ref="populateFxRatesCacheTasklet" />
</batch:step>
<batch:step id="ExternalDbQuery" next="...">
<batch:tasklet ref="ExternalDBQueryTasklet" />
</batch:step>
...
</batch:job>
我们有如上所述定义的批处理作业,有 20 多个步骤,包括与外部系统的接口(>5 个这样的步骤),还有步骤阅读器等。
在开发集成测试用例时,我正在考虑使用 spring-batch-test API 和 Mockito,以便我可以模拟涉及外部系统调用的步骤。使用这种方法,我必须在 spring 配置本身中创建模拟对象(将 Mockito 模拟注入 Spring bean)。我不确定的是,如果我使用 spring 配置它们,我将如何模拟模拟 bean 的方法调用,如下所示。
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.Dao" />
</bean>
我不确定我是否可以清楚地解释我的情况。请建议您是否有任何其他更好的意见来测试 Spring-batch 作业的 E2E 流程,以及您是否可以提供对上述方法有帮助的任何说明。