当前位置: 首页 > 知识库问答 >
问题:

Spring批处理步骤集成测试

翁良弼
2023-03-14

我正在寻找一些关于测试Spring批处理步骤和步骤执行的一般性意见和建议。

我的基本步骤是从api读入数据,处理实体对象,然后写入数据库。我已经测试了快乐之路,这一步成功地完成了。我现在想做的是在处理器阶段数据丢失时测试异常处理。我可以单独测试processor类,但我更愿意测试整个步骤,以确保在步骤/作业级别正确反映流程故障。

我已经阅读了spring批量测试指南,如果我是诚实的,我对它有点迷茫。是否可以使用StepScopeTestUtils。是否安装脚本或更新步骤执行以测试此场景?理想情况下,我会在处理器启动之前强制读卡器返回错误数据。

任何建议将不胜感激。

共有1个答案

邓业
2023-03-14

最佳方法取决于测试的范围。从这里的字里行间读一点,我假设您正在使用Spring信息技术,设置Spring上下文,并使用JobLauncherTestUtils开始工作或步骤。

我认为最简单的方法是用触发错误场景的mock替换一个bean。使用Mockito,可以通过向测试配置中添加类似的内容来实现。

@Bean
public ReaderDataRepository dataApi(){
    return mock(ReaderDataRepository.class);
}

然后,此bean覆盖实际实现。在测试设置中,您可以非常明确地配置这个模拟。

@Autowired
private ReaderDataRepository mockedRepository;

@Before
public void setUp() {
    when(mockedRepository.getData()).thenReturn(faultyData())
}

这涉及到对Spring“魔法”的很少操作,并且非常明确地定义了测试中的错误。

 类似资料:
  • 我正在尝试修复Spring Batch中的一个问题,这个问题最近一直困扰着我们的系统。我们有一份工作,在大多数情况下都很好。下载和处理数据是一个多步骤的工作。 问题是有时工作会爆棚。也许我们试图连接到的服务器抛出了错误,或者我们在工作进行到一半时关闭了服务器。此时,下次我们的quartz调度程序尝试运行该作业时,它似乎什么也不做。以下是此作业定义的删节版本: 委婉地说,我是Spring Batch

  • 我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像 当我的应用程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做 编辑:我甚至试过这种方法 我面临着例外。sp

  • 我第一次使用Spring batch,我需要一些关于验证步骤的帮助。 在真正开始我的批处理作业之前,我需要对要处理的文件进行一些验证,例如: 使用数据库中的信息检查名称 使用来自系统和数据库的信息检查第一行和最后一行(特定) 用第一行中的数据检查总行号 在那之后,我真的可以开始我的批处理工作了。 我认为有多个步骤相互链接,第一步进行验证,如果文件无效,则进入错误步骤。 我如何进行验证?所有找到的阅

  • 我目前正在处理一批数据,这些数据来自一个拥有数百万行的大型SQL数据库。 它在处理器中执行一些处理,包括通过带有连接的大型sql查询对从Reader检索到的行进行分组。 编写器将结果写入另一个表。 问题是此Batch存在性能问题,因为Sql选择查询需要大量时间并且步骤不会在多线程中执行。 因此,我希望在多标题中运行它们,但问题是,这些步骤通过计算具有相同类型的所有行的总数来对行进行分组。 因此,如

  • 我有一个spring批处理作业,预计将根据FIFO顺序处理'N'个作业ID。这个Spring批处理作业有5个步骤。 我们使用DECIDER来确定是否有更多的job-id。如果是,请转到第一步并运行该job-id的所有步骤。 我在spring-batch发出的日志中看到“duplicate step”消息,在第一个作业中的步骤(例如job-id=1)获得未知状态之前,该消息似乎没有问题。在这种情况下

  • 使用Spring Batch 3.0.4.Release。 我将作业配置为使用分区步骤。从机步骤使用块大小1。任务执行器中有六个线程。我使用从六到数百的各种网格大小来运行这个测试。我的网格大小是从StepExecutions的数量,我希望==我的分区器创建的ExecutionContexts的数量。 下面是Java配置代码: