如何编写 Junit 测试以验证 API 的 ReadTimeout/Exception 重试

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

我想测试我的应用程序使用 micronaut httpclient 调用的 api 的读取超时。

@Validated
@Client("${api.url}")
public interface ApiClient {
    @Get("/v1/itemdetails{?ids*}")
    @Retryable(attempts = "${attempts:3}", delay = "${delay:1s}")
    HttpResponse<ItemDto> getItems(
            @NotEmpty List<String> ids,
            @Header("authorization") @NotBlank String authorization
    );
}

调用此客户端的代码如下:

private void saveItems(List<String> ids) {
    try {
        String token = getToken();
        HttpResponse<ItemDto> itemResponse =ApiClient.getItems(ids,token);
        handleItemResponse(ids, itemResponse);
    } catch (Exception e) {
        log.error("Error saving items", e);
    }
}

我如何编写测试来验证重试是否发生 3 次?我已经将 Wiremock 配置为响应延迟超过 ReadTimeout 值。

我知道的一种方法是,我可以将 ApiClient 调用放入另一个带有

Retryable
注释的方法中,并验证调用
getItems
方法的次数。

@Retryable(attempts = "${attempts:3}", delay = "${delay:1s}")
private HttpResponse<ItemDto> getItemsFromApi(List<String> ids){
   logs.debug("calling Api...");
   return ApiClient.getItems(ids,token);
}

请建议是否有更好的方法来测试这个。

java junit timeout micronaut wiremock
© www.soinside.com 2019 - 2024. All rights reserved.