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.

TA貢獻(xiàn)1784條經(jīng)驗 獲得超2個贊
Varargs 可以表示為一個數(shù)組,所以你可以嘗試這個以及指定第二個參數(shù)的確切類型:
getForObject(Mockito.anyString(),Mockito.any(Class.class), Mockito.any(Object[].class))
添加回答
舉報