我想测试我的应用程序使用 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);
}
请建议是否有更好的方法来测试这个。