Mockito anyListOf() List<List<String>>



我正在使用 mockito-core:2.8.47Java 7,并希望在a中使用并验证 anyListOf或其他任何方法。我的问题是,如果我只使用anyList,则说:

类型y中的方法名称(int,list&lt; list&lt; string>>)不是
适用于参数(int,list&lt; object>)

我该如何修复?

ArgumentMatchers.anyListOf(ArgumentMatchers.anyListOf( String.class ) )不起作用...

在我看来,您只需使用其他通用信息即可使用基本的anyList()方法:

Mockito.doReturn("1").when(classMock).name(ArgumentMatchers.eq(1)
                , ArgumentMatchers.<List<String>>anyList());

这对我有用,还记得为第一个int变量添加ArgumentMatcher,否则Mockito将失败。

有两种方法:

  1. 简单地施放any()充当足够的类型提示:
Mockito.doReturn("1")
    .when(classMock)
    .name(eq(1), (List<List<String>>) any());
  1. anyList()提供其他通用信息。
    这基本上是与下面答案的方法相同的方法,只有使用别名Mockito的更简洁,该方法映射到ArgumentMatcher实现。
Mockito.doReturn("1")
    .when(classMock)
    .name(eq(1), Mockito.<List<String>> anyList());

两者之间存在细微但显着的差异。想象一下name()有以下两个过载:

// Overload A (target of this test)
String name(int id, Object entities) {...}
// Overload B (not targeted in this test)
String name(int id, List<CustomMapImpl> entities) {...}

当第二个参数变为测试的代码中的null时,方法1。还将正确匹配Overload A,而方法2. 将解决B 。为了使该特定情况与仿制药匹配,需要使用其他参数匹配器明确定义:

Mockito.doReturn(null)
    .when(classMock)
    .name(eq(1), Mockito.<List<List<String>>>isNull());

相关内容

  • 没有找到相关文章

最新更新