mockito – Spring批处理作业的端到端测试用例

我有一个申请,我正在使用春季批次.我想编写一个可以端到端测试批处理作业的测试用例.我一直在探索相同的各种选择.我检查了一致性测试案例是否有用,但我不确定它是否是测试弹簧批作业的理想方法.到目前为止,我认为集成测试用例应该适合我的情况.我想知道测试我的场景应该是什么样的理想方法.

<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,以便我可以模拟涉及外部系统调用的步骤.使用这种方法,我将不得不在弹簧配置本身(Injecting Mockito mocks into a Spring bean)中创建模拟对象.我不确定的是,如果我使用spring配置它们,我将如何模拟方法调用模拟bean.

<bean id="dao" class="org.mockito.Mockito" factory-method="mock"> 
      <constructor-arg value="com.package.Dao" /> 
</bean>

我不确定我是否可以清楚地解释我的情景.如果您对弹簧批处理作业的E2E流程测试有任何其他更好的意见,请提供建议,如果您能对上述方法有任何明确的建议,请提供帮助.

最佳答案 你的方法似乎对我有用.我已多次使用类似的设置.只需从测试中设置Spring上下文,然后使用JobLauncherTestUtils来处理您的工作.

要考虑的一件事是嘲笑.如果多个连续步骤从同一数据源读取和写入相同的数据,那么模拟这些数据可能会导致测试中的大量模拟配置.也许为这些步骤设置内存数据库会更容易.这取决于您的实施细节.

关于你的嘲笑的设置……
您可以简单地将您的模拟自动装配到测试中.

@Autowired
private Dao mockedDao;

然后你可以像任何模拟一样简单地配置模拟.

when(dao.findById(any())).thenReturn(something);
点赞