在需要模拟静态方法的 spring-boot 中测试 @Scheduled 任务

问题描述 投票:0回答:0

我正在尝试验证 spring-boot 应用程序中的计划任务。在流程中调用静态方法。当服务类被独立测试时,使用 mockedStatic 会按预期工作,但当服务作为计划任务的一部分被调用时则不会。在测试调度程序时,静态方法正在进行真正的方法调用。

提前感谢您的帮助。


@RequiredArgsConstructor
@Component
public class ConnectionHandler

private final ConnectionService connectionService;
private final RequestMapper requestMapper;

@Scheduled(cron="${scheduler.cronTime}")
public void processService() {

...
  List<String> idList = getIdList(); 
  idList.forEach(id ->{
    var cronRequest = createRequest(id)
    sendRequest(cronRequest);
  });
}

void sendRequest(CronRequest cronRequest) {
  Mono.just(cronRequest)
    .doOnNext(request -> log.debug("start request for {}", request.id))
    .flatMap(request -> requestMapper.mapRequest(id))
    .flatMap(hostRequest -> connectionService->sendRequest(hostRequest))
    .onErrorResume(RequestException.class, ex -> log.error("Service error {}-{}",         ex.getHttpStatus(), ex.getResponse()))
response -> requestMapper.mapResponse(response))
    .contextWrite(RequestUtils.getContext(id))
   .block();

}



@ExtendWith(OutputCaptureExtension.class)
@SpringBootTest
@TestPropertySource(locations = "/application-test.properties")
class ConnectionHandlerTest {

@Test
void testScheduledService(CapturedOutput capturedOutput) {
   try{MockedStatic<RequestFactory> ignored = mockStatic(RequestFactory.class)) {
         RequestConfig requestConfig = new RequestConfig();
         requestConfig.setHostIp("10.10.10.10");
         requestConfig.setPort(443)
         when(RequestFactory.getRequestConfig("ID1")).thenReturn(requestConfig);
         await().atMost(2, TimeUnit.MINUTES).untilAsserted(() -> {
               assertEquals(1, capturedOutput.getAll().lines.collect(Collectors.toList()).stream.filter(entry -> entry.contains("request completed")).count());
         });
    }
                                     assertFalse(capturedOutput.getAll().lines.collect(Collectors.toList()).stream.anyMatch(entry -> entry.contains("Service error")));
    
}

}

我也在等待中尝试了 MockedStatic。 使用 spring-boot 版本 2.7.10 mockito 内联 v5.1.1

spring-boot mockito awaitility
© www.soinside.com 2019 - 2024. All rights reserved.