使用 Mockito 的 argThat 匹配器会导致 "method ambiguous for the type" 错误
Using Mockito's argThat matcher causes "method ambiguous for the type" error
我正在尝试模拟一个采用映射并将其他参数作为参数的方法。我的目标是匹配地图条目。
最初我将模拟定义为:
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
?
您可以转换为所需的类型
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);
我正在尝试模拟一个采用映射并将其他参数作为参数的方法。我的目标是匹配地图条目。 最初我将模拟定义为:
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
?
您可以转换为所需的类型
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);