第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

天涯盡頭無女友 2023-05-10 15:38:39
我正在使用 apache http 客戶端來使用服務(wù),我需要根據(jù)超時和響應(yīng)代碼重試請求。為此,我實現(xiàn)了如下代碼。如何為超時和響應(yīng)代碼場景的重試邏輯編寫 junit 測試。我想以這種方式編寫單元測試,當我發(fā)送任何 post/get 請求時,如果它返回 429 錯誤代碼響應(yīng)或任何 TimeOutException 我應(yīng)該確保重試邏輯正確執(zhí)行。我不知道如何為重試邏輯編寫單元測試。通過谷歌搜索,我找到了以下鏈接,但它對我沒有幫助。單元測試 DefaultHttpRequestRetryHandler我正在使用 junit、Mockito 編寫單元測試和 PowerMock 來模擬靜態(tài)方法。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條經(jīng)驗 獲得超2個贊

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


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


這個工具http://wiremock.org/是執(zhí)行此操作的完美選擇。您可以為您的目標 url 創(chuàng)建存根,并根據(jù)您喜歡的幾乎任何內(nèi)容給出一系列響應(yīng)。


您的代碼在調(diào)用之前應(yīng)該看起來像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")));


查看完整回答
反對 回復(fù) 2023-05-10
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號