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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 junit 對(duì) HttpClient 重試邏輯進(jìn)行單元測(cè)試

如何使用 junit 對(duì) HttpClient 重試邏輯進(jìn)行單元測(cè)試

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

您的 httpClient 有一個(gè)“目標(biāo)”網(wǎng)址,可以說(shuō)是 localhost:1234。你想要測(cè)試的是你的重試代碼,所以你不應(yīng)該觸摸 httpClient 本身(因?yàn)樗皇悄愕慕M件,你不應(yīng)該也需要測(cè)試它。)


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


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


您的代碼在調(diào)用之前應(yīng)該看起來(lái)像uploadFile


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

        .willReturn(aResponse()

            .withStatus(200)

            .withBody(externalResponse)));

打電話后uploadFile


并驗(yàn)證步驟以驗(yàn)證到達(dá)模擬端點(diǎn)的模擬請(qǐng)求


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

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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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