使用Mockito的argThat匹配器导致"类型方法模糊"错误

Mrk*_*rkK 4 java junit unit-testing hamcrest mockito

我试图模拟一个方法,该方法采用地图并将其他参数作为参数耦合.我的目标是匹配地图条目.最初我将我的模拟定义为:

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);
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

"The method findResource(Map<String,String>, Integer, Integer, String, String) is ambiguous for the type DiscoveryJobCatalogResourceAccessor"
Run Code Online (Sandbox Code Playgroud)

当我更换argThat使用any(HashMap.class)这样的:

when(discoveryJobCatalogResourceAccessor.findResource(any(HashMap.class), any(Integer.class),
            any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse);
Run Code Online (Sandbox Code Playgroud)

错误消失了,但在这种情况下我无法匹配地图值.似乎Mockito的argThat导致模棱两可.我想知道是否有办法使用而argThat不会导致错误?

Rom*_*n C 8

您可以转换为所需的类型

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);
Run Code Online (Sandbox Code Playgroud)