Mockito and Mockito.any(Map.class)



使用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()并且我正在传递一个参数HashMapMockito.any(Map.class)Mockito.anyMap()有什么区别?

any(Map.class)anyMap() 之间只有一个很小的区别:从 Mockito 2.0 开始,Mockito 会将any(Map.class)调用视为表示isA(Map.class),而不是完全忽略参数。(请参阅Mockito贡献者Brice对此SO答案的评论。由于restOperationMock.exchange采用对象变量,因此您可能需要anyMap才能捕获传递非 Map 对象或根本不传递任何对象的情况。

(我之前把它作为一个"虚拟值"来返回,Mockito可以返回一个空的Map来调用anyMap(),但只能返回一个null来调用any(Map.class)。如果在存根期间restOperationMock.exchange委托给真正的实现,例如它是一个间谍或不可模拟的方法(最终方法、最终类上的方法等(,那么该虚拟值可以在实际代码中使用。但是,这仅适用于any(); anyMap()any(Map.class)都为 Mockito 提供了足够的信息来返回虚拟 Map 实现,其中any()的泛型被删除,并且只知道足够的信息来返回null

最新更新