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

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

使用 Mockito 模擬重載方法

使用 Mockito 模擬重載方法

滄海一幻覺 2023-05-17 16:06:37
我正在測試一些依賴于類getForObject()中方法的方法RestTemplate。該getForObject()方法重載了簽名getForObject(String url, Class<T> responseType, Object... uriVariables)和getForObject(String url, Class<T> responseType, Map<String, ?>我需要Object...在其參數(shù)中存根該方法以拋出異常,但我不能,因為它Mockito.any()也包含該Map類型。因此,存根方法getForObject(Mockito.anyString(),Mockito.any(), Mockito.any()將指向觸發(fā)編譯錯誤的兩種方法。這個問題有任何可能的解決方法嗎?我已經(jīng)嘗試使用Mockito.anyObject()無濟于事
查看完整描述

2 回答

?
蝴蝶不菲

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

不確定您的問題可能是什么,但此時我不妨發(fā)布一個工作示例。

如前所述,您需要正確指定每個參數(shù)的類型,以便 mockito 可以定位到匹配的方法簽名。

有關(guān)處理舊 mockito 版本使用的可變參數(shù)的語法,請檢查this answer.

import static org.mockito.ArgumentMatchers.any;

...


@RunWith(MockitoJUnitRunner.class)

public class MockitoTest {


? ? @Test

? ? public void test() throws Exception {


? ? ? ? RestTemplate api = Mockito.mock(RestTemplate.class);


? ? ? ? Object obj1 = new Object();

? ? ? ? Object obj2 = new Object();

? ? ? ? Object obj3 = new Object();


? ? ? ? Mockito.when(api.getForObject(any(String.class),any(Class.class), ArgumentMatchers.<Object>any())).thenReturn(obj1);

? ? ? ? Mockito.when(api.getForObject(any(String.class),any(Class.class), any(Map.class))).thenReturn(obj2);

? ? ? ? Mockito.when(api.getForObject(any(URI.class),any(Class.class))).thenReturn(obj3);


? ? ? ? Assert.assertEquals(obj1, api.getForObject("", String.class));

? ? ? ? Assert.assertEquals(obj1, api.getForObject("", String.class, obj1));

? ? ? ? Assert.assertEquals(obj1, api.getForObject("", String.class, obj1, obj2));

? ? ? ? Assert.assertEquals(obj1, api.getForObject("", String.class, obj1, obj2, obj3));

? ? ? ? Assert.assertEquals(obj1, api.getForObject("", String.class, new Object[] {obj1,obj2,obj3}));


? ? ? ? Assert.assertEquals(obj2, api.getForObject("", String.class, new HashMap()));


? ? ? ? Assert.assertEquals(obj3, api.getForObject(new URI(""), String.class));

? ? }

}

對于您的用例,只需將thenReturnwith替換為thenThrow.


查看完整回答
反對 回復(fù) 2023-05-17
?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗 獲得超2個贊

Varargs 可以表示為一個數(shù)組,所以你可以嘗試這個以及指定第二個參數(shù)的確切類型:

getForObject(Mockito.anyString(),Mockito.any(Class.class), Mockito.any(Object[].class))


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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