用Mockito模拟重载的方法

我正在测试一些依赖于类中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()无济于事

回答:

不知道您的问题可能是什么,但是在这一点上,我不妨发布一个可行的示例。

如前所述,您需要正确指定每个参数的类型,以便Mockito可以找到匹配的方法签名。

有关处理较早的嘲笑版本使用的varargs的语法,请检查thisanswer

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));

}

}

为了您的用例只需更换thenReturnthenThrow

以上是 用Mockito模拟重载的方法 的全部内容, 来源链接: utcz.com/qa/432380.html

回到顶部