我正在使用 mockito-core:2.8.47
和 Java 7
,并希望在a中使用并验证 anyListOf
或其他任何方法。我的问题是,如果我只使用anyList
,则说:
类型y中的方法名称(int,list< list< string>>)不是
适用于参数(int,list< object>)
我该如何修复?
ArgumentMatchers.anyListOf(ArgumentMatchers.anyListOf( String.class ) )
不起作用...
在我看来,您只需使用其他通用信息即可使用基本的anyList()
方法:
Mockito.doReturn("1").when(classMock).name(ArgumentMatchers.eq(1)
, ArgumentMatchers.<List<String>>anyList());
这对我有用,还记得为第一个int变量添加ArgumentMatcher
,否则Mockito将失败。
有两种方法:
- 简单地施放
any()
充当足够的类型提示:
Mockito.doReturn("1")
.when(classMock)
.name(eq(1), (List<List<String>>) any());
- 向
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());