Not sure what your problem might be, but at this point I might as well just post a working example.
As mentioned before you need to properly specify the type of each parameter, so that mockito can locate the matching method signature.
For the syntax to handle varargs used by older mockito versions, check 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));
}
}
For your usecase just replace the thenReturn
with thenThrow
.