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

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

如何使用 junit mockito 覆蓋匿名類重寫方法

如何使用 junit mockito 覆蓋匿名類重寫方法

慕碼人2483693 2023-04-13 16:46:00
我有以下代碼根據(jù)響應(yīng)代碼重試請(qǐng)求。public class Sample {    public static HttpClient getInstance() {        HttpClientBuilder builder = HttpClients.custom();                 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)&& (executionCount < 3));                }                @Override                public long getRetryInterval() {                    return waitPeriod;                }            });        return builder.build();    }}當(dāng)我為此方法編寫單元測(cè)試時(shí),未涵蓋getInstance覆蓋的方法。(retryRequest, getRetryInterval)我如何編寫單元測(cè)試來覆蓋這些方法。通過谷歌搜索我發(fā)現(xiàn)我們可以使用ArgumentCaptor. 我試過下面的代碼,但它不起作用。import static org.mockito.Mockito.when;import static org.mockito.Mockito.verify;import org.apache.http.HttpResponse;import org.apache.http.StatusLine;import org.apache.http.client.ServiceUnavailableRetryStrategy;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.impl.client.HttpClients;import org.apache.http.protocol.HttpContext;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.mockito.ArgumentCaptor;import org.mockito.Mock;}argumentCaptor.capture()總是給我null。我越來越喜歡org.mockito.exceptions.base.MockitoException:沒有捕獲到參數(shù)值!您可能忘記在 verify() 中使用 argument.capture()... ...或者您在存根中使用了 capture() 但未調(diào)用存根方法。誰(shuí)可以幫我這個(gè)事。我想測(cè)試 retryRequest 方法的功能。
查看完整描述

1 回答

?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊

編輯:改寫答案以使其更易于閱讀。


  1. 應(yīng)該由 PowerMockito 處理的類需要在@PrepareForTest注釋中聲明。

  2. 如果注釋用于創(chuàng)建模擬,則所有未在注釋中聲明的帶注釋的類@PrepareForTest都由 Mockito 創(chuàng)建。

  3. 如果注釋用于創(chuàng)建模擬并被MockitoAnnotations.initMocks(this);調(diào)用,這顯然會(huì)導(dǎo)致聲明被覆蓋,所有模擬都由 Mockito 創(chuàng)建。(來源:https ://groups.google.com/forum/#!topic/powermock/yPBey4hr7IU )

  4. Mockito 無法處理靜態(tài)或最終方法。
    模擬操作可能會(huì)無提示地失敗。


你的問題的根源是這HttpClientBuilder#setServiceUnavailableRetryStrategy是一個(gè)最終的方法,因此不能被 Mockito 處理。

解決方案是 Mock ofHttpClientBulder必須由 PowerMockito 處理。按照1.它的需要在@PrepareForTest注解中聲明。

@PrepareForTest({ HttpClients.class, HttpClientBuilder.class, Sample.class})


如果你想使用注釋來創(chuàng)建模擬,你不能調(diào)用

MockitoAnnotations.initMocks(this);

(見2./我用最新的 powermockito 版本(1.7.4 / 2.0.2)驗(yàn)證了這個(gè)問題)


否則你必須手動(dòng)創(chuàng)建模擬。

HttpClientBuilder clientBuilderMock = PowerMockito.mock(HttpClientBuilder.class);


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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