使用Mockito我遇到了以下问题:
Mockito.when(restOperationMock.exchange(
Mockito.anyString(),
Mockito.any(HttpMethod.class),
Mockito.any(HttpEntity.class),
Mockito.eq(CustomerResponse.class),
**Mockito.anyMap()**)).
thenReturn(re);
问题是该方法没有截获,因为我使用的是Mockito.any(Map.class)而不是Mockito.anyMap(),我将HashMap作为参数传递。 Mockito.any(Map.class)和Mockito.anyMap()之间有什么区别?
答案 0 :(得分:9)
any(Map.class)
和anyMap()
之间只有一个小差异:从Mockito 2.0开始,Mockito会将any(Map.class)
调用视为isA(Map.class)
而不是完全忽略参数。 (请参阅Mockito撰稿人Brice对this SO answer的评论。)因为restOperationMock.exchange
takes an Object vararg,您可能需要anyMap
来捕获传递非Map对象的情况,或者根本没有对象通过了。
(我以前把它作为"虚拟值"要返回,Mockito可以返回一个空地图来调用anyMap()
,但只能返回null
调用any(Map.class)
。如果restOperationMock.exchange
在存根期间委托给一个真正的实现,比如它是间谍或不可篡改的方法(最终方法,最后一个类的方法等),那么那个虚拟值可以在实际代码中使用。但是,这仅适用于any()
; anyMap()
和any(Map.class)
两者都为Mockito提供了足够的信息来返回虚拟Map实现,其中{{ 1}}已删除其泛型,只知道返回any()
。)