java - 使用 Mockito 的 argThat() 匹配器导致 "method ambiguous for the type"错误

标签 java unit-testing junit mockito hamcrest

我正在尝试模拟一个采用映射并将其他参数作为参数的方法。我的目标是匹配 map 条目。 最初我将模拟定义为:

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

当我将 argThat() 替换为 any(HashMap.class) 时,如下所示:

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

错误消失了,但在这种情况下我无法匹配 map 值。似乎 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);

关于java - 使用 Mockito 的 argThat() 匹配器导致 "method ambiguous for the type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726148/

相关文章:

java - 需要知道如何使用分析器/使用哪一个

unit-testing - 测试 RxJava .delay(20, SECONDS)

java - 有没有一种更简洁的方法来为单元测试伪造 Analytics API

sql - 我应该如何对此进行单元测试

java - 测试用例未在 JUnit 中运行

java - 单元测试方法在运行测试时不使用模拟对象。而是调用实际的类和方法

java - 如何使用 webdriver 查找 html 文件中 <P 标签中的元素?

java - 在 JPanel 上绘制矩形

java - MySQL中如何处理锁定帐户

java - 通过 jenkins/intellij 并行运行 junits 测试以最大化性能