2016-03-01 74 views
2

我想模拟一个方法,它需要一个地图和其他参数作为参数。我的目标是匹配地图条目。 本来我定义我的嘲笑为:使用Mockito的arg该匹配器导致“方法模糊的类型”错误

when(discoveryJobCatalogResourceAccessor.findResource(argThat(allOf(hasEntry("start", "testStart"), hasEntry("level", "testLevel"))), any(Integer.class), 
      any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse); 

这会导致以下错误:

"The method findResource(Map<String,String>, Integer, Integer, String, String) is ambiguous for the type DiscoveryJobCatalogResourceAccessor" 

当我与any(HashMap.class)取代argThat这样的:

when(discoveryJobCatalogResourceAccessor.findResource(any(HashMap.class), any(Integer.class), 
      any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse); 

错误了,但在这种情况下,我无法匹配地图值。似乎Mockito的argThat造成歧义。我想知道是否有办法使用argThat而不会导致错误?

回答

4

您可以强制转换为所需类型

when(discoveryJobCatalogResourceAccessor.findResource(HashMap<String,String>)argThat(allOf(hasEntry("start", "testStart"), hasEntry("level", "testLevel"))), any(Integer.class), 
      any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse); 
+1

就是这样。问题解决了。感谢yoy – MrkK

+1

@MrkK不要忘记将其标记为已接受。如果你是新来的,不知道如何接受答案,请阅读http://stackoverflow.com/tour –

相关问题