亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 junit 對 HttpClient 重試邏輯進行單元測試

如何使用 junit 對 HttpClient 重試邏輯進行單元測試

天涯盡頭無女友 2023-05-10 15:38:39
我正在使用 apache http 客戶端來使用服務,我需要根據超時和響應代碼重試請求。為此,我實現了如下代碼。如何為超時和響應代碼場景的重試邏輯編寫 junit 測試。我想以這種方式編寫單元測試,當我發送任何 post/get 請求時,如果它返回 429 錯誤代碼響應或任何 TimeOutException 我應該確保重試邏輯正確執行。我不知道如何為重試邏輯編寫單元測試。通過谷歌搜索,我找到了以下鏈接,但它對我沒有幫助。單元測試 DefaultHttpRequestRetryHandler我正在使用 junit、Mockito 編寫單元測試和 PowerMock 來模擬靜態方法。public class GetClient {private static CloseableHttpClient httpclient;public static CloseableHttpClient getInstance() {        try {            HttpClientBuilder builder = HttpClients.custom().setMaxConnTotal(3)                    .setMaxConnPerRoute(3);            builder.setRetryHandler(retryHandler());            builder.setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() {            int waitPeriod = 200;            @Override            public boolean retryRequest(final HttpResponse response, final int executionCount,                final HttpContext context) {                int statusCode = response.getStatusLine().getStatusCode();                return (((statusCode == 429) || (statusCode >= 300 && statusCode <= 399))                            && (executionCount < 3));            }            @Override            public long getRetryInterval() {                return waitPeriod;            }            });                        httpclient = builder.build();        } catch (Exception e) {            //handle exception        }        return httpclient;    }
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

您的 httpClient 有一個“目標”網址,可以說是 localhost:1234。你想要測試的是你的重試代碼,所以你不應該觸摸 httpClient 本身(因為它不是你的組件,你不應該也需要測試它。)


因此,手頭的問題是當您的 localhost:1234 響應有問題時,您希望看到將運行的重試邏輯(不是您的實現..如果它沒有以正確的 conf 運行是他們的問題)有效..唯一的事情你所要做的就是模擬“localhost:1234”!


這個工具http://wiremock.org/是執行此操作的完美選擇。您可以為您的目標 url 創建存根,并根據您喜歡的幾乎任何內容給出一系列響應。


您的代碼在調用之前應該看起來像uploadFile


    stubFor(post(urlEqualTo("/hash"))

        .willReturn(aResponse()

            .withStatus(200)

            .withBody(externalResponse)));

打電話后uploadFile


并驗證步驟以驗證到達模擬端點的模擬請求


    Assert.assert* //... whatever you want to assert in your handlers / code / resposnes

    verify(postRequestedFor(urlEqualTo("/hash")));


查看完整回答
反對 回復 2023-05-10
  • 1 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號