如何对 Spring 批处理分区工作步骤进行单元测试?

How do I unit test Spring Batch partition worker steps?

我熟悉单元测试 Spring 批处理作业步骤(和整个作业),但想知道是否有办法对分区的 "worker" 步骤进行单元测试(无需测试)整个分区步骤)。

我感到困惑的是,通常一个步骤的单元测试会调用:

JobLauncherTestUtils.launchStep(stepName, jobParameters, jobExecutionContext)

但是,这是分区中的一个工作步骤,我还需要一些方法来传递 StepExecutionContext。有办法吗?

除非您不信任 Spring Batch 提供的 Step 实现,否则我会测试工作步骤中使用的组件(需要从步骤执行上下文中读取值)而不是工人自己走。让我举两个例子:

面向块的工作步骤

在这种情况下,我将对需要从步骤执行上下文而不是面向块的步骤本身(由Spring批次,应该可以信任,除非你不信任。

简单的 tasklet worker 步骤

如果工作步骤是一个简单的 tasklet,您可以对 Tasklet 本身而不是 TaskletStep 进行单元测试。

在这两种情况下,组件(reader/processor/writer 或 tasklet)都应该在步骤范围内以访问步骤执行上下文,并且您可以根据需要 mock/stub 步骤执行上下文。详情请参考Testing Step-Scoped Components