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

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

魏臻
2023-03-14
<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>
<bean id="dao" class="org.mockito.Mockito" factory-method="mock"> 
      <constructor-arg value="com.package.Dao" /> 
</bean>

我不确定我是否能清楚地解释我的情况。请建议您对spring-batch作业测试E2E流是否有其他更好的意见,以及您是否可以对上述方法提供任何清晰的说明,这将是有帮助的。

共有1个答案

俞飞鸣
2023-03-14

你的方法在我看来是有效的。我已经多次使用类似的设置。只需从测试中设置一个Spring上下文,并使用JobLauncherTestUtils来处理您的作业。

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

关于你模拟的设置...您可以简单地将您的模拟添加到测试中。

@Autowired
private Dao mockedDao;
when(dao.findById(any())).thenReturn(something);
 类似资料:
  • 我遵循了官方的Spring批处理指南(https://Spring.io/guides/gs/batch-processing/)并成功地完成了该示例。对于同样的工作,我正在尝试创建一个端到端的集成测试。特别是我只使用测试配置。在我的测试中,我定义了所有需要的bean。因此这应该是运行作业所需的唯一配置。这给了很大的灵活性。创建ApplicationContext时测试失败。它抱怨找不到数据源。当

  • 我最近开始进行groovy测试,以测试使用一个步骤(ItemReader、ItemProcessor、ItemWriter)的spring批处理作业 知道我正在使用h2内存数据库,我已尝试通过单元测试启动作业,但无法验证作业是否已完成: 此外,当我试图调试它时,它不会从一端到另一端,而是在测试完成后在ItemReader中停止。我知道这不是等待工作完成。 有没有办法在工作完成后才完成测试? 非常感

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我今天好像赢不了... 有没有一种方法可以从Spock SpringBootTest集成测试中的关系中读取,而无需将测试注释为或添加不切实际的? 或者,是否有方法从测试用例中启动Spring-Batch作业? 让我详细说明... 我试图为我的Spring Batch reporting流程提供一个简单的Spring Boot Integration测试,该测试从Dangled web of DB2

  • 背景: 我目前正在开发一个应用程序,该应用程序使用Spring Batch读取一组文件并将文件的内容缓存在内存中。缓存的数据然后由划分为不同类的业务逻辑层使用,每个类通过使用缓存中的数据执行特定的业务功能。 要求: 我被分配了对业务逻辑层进行单元测试的任务。由于业务逻辑层假设数据将在缓存中可用,所以在测试业务逻辑类之前,我需要一种在单元测试中触发Spring批处理作业的方法。 问题是: 我正在考虑