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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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...在其參數中存根該方法以拋出異常,但我不能,因為它Mockito.any()也包含該Map類型。因此,存根方法getForObject(Mockito.anyString(),Mockito.any(), Mockito.any()將指向觸發編譯錯誤的兩種方法。這個問題有任何可能的解決方法嗎?我已經嘗試使用Mockito.anyObject()無濟于事
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

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

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

有關處理舊 mockito 版本使用的可變參數的語法,請檢查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.


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

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

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

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


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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