如何对 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。
我熟悉单元测试 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。