【问题标题】:Using Mockito's argThat matcher causes "method ambiguous for the type" error使用 Mockito 的 argThat 匹配器会导致“类型的方法不明确”错误
【发布时间】:2016-06-14 01:29:23
【问题描述】:

我正在尝试模拟一种方法,该方法采用地图并将其他参数作为参数。我的目标是匹配地图条目。 最初我将我的模拟定义为:

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 而不会导致错误?

【问题讨论】:

    标签: java unit-testing junit mockito hamcrest


    【解决方案1】:

    您可以转换为所需的类型

    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);
    

    【讨论】:

    • @MrkK 不要忘记将其标记为已接受。如果您是新来的,不知道如何接受答案,请阅读stackoverflow.com/tour
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2022-12-29
    • 2023-03-17
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    相关资源
    最近更新 更多