gpt4 book ai didi

java - 测试 Spring 批量作业步骤范围

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:01 24 4
gpt4 key购买 nike

我正在尝试测试一个 spring 批处理作业,该作业执行读取(从另一个应用程序获取数据)过程(简单计算)并写入(写入 mongodb)

读者是@StepScope

这里是读取任务的postConstruct。

 @PostConstruct
public void init(){
employees.addAll(getListOfEmployeesBy(affectationMotifService.findAllRegistrationNumbers()));
}

public List<EmployeeForSalaryDTO> getListOfEmployeesBy(List<String> registrationNumbers){
LOG.debug("request to get all the employees by registration numbers {}" , registrationNumbers);
return coreResourceFeign.getAllEmployeesForSalaryByRegistrationNumbers(registrationNumbers).getBody();
}

当我尝试启 Action 业测试或应用程序中的任何测试时。 spring 总是运行读取任务的 init() .. 这将使测试失败,因为我需要模拟 coreResourceFeign.getAllEmployeesForSalaryByRegistrationNumbers(registrationNumbers) 。我无法模拟该方法,因为它在测试开始之前运行。

这是测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SalaryApp.class, SecurityBeanOverrideConfiguration.class})
public class SalaryJobServiceTest {
@Autowired
@InjectMocks
private SalaryJobService salaryJobService;

@Test
public void startJob() throws Exception {
SalaryJobDTO SalaryJobDTO = salaryJobService.start(Collections.emptyList());
Assert.assertNotNull(salaryJobDTO.getId());
}
}

我不知道如何处理 Spring 批量测试。欢迎任何建议或帮助。

最佳答案

@PostConstruct 将确保在创建对象后立即调用您的方法。 Spring应用程序在应用程序启动时根据配置创建所有bean。这是预期的行为。如果您不想在应用程序启动期间调用您的方法,请删除@PostConstruct,然后您可以运行模拟依赖对象的测试。

相反,您应该使用阅读器 read 方法将数据加载到阅读器。

关于java - 测试 Spring 批量作业步骤范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com