我收到以下异常
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced argument matcher detected here:
You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))
代码行
@Mock
Template templateParser = new TemplateParser();
when(templateParser.getLayoutIdsFromTemplate(any(HashMap.class)))
.thenReturn(Arrays.asList("id1", "id2"));
我正在嘲笑的功能如下
public class TemplateParser {
public List<String> getLayoutIdsFromTemplate(HashMap<String, Object> parsedTemplate)
{
List<String> listOfLayoutIds = new ArrayList<String>();
//Loading listOfLayoutIds here
return listOfLayoutIds;
}
}
谁能告诉我这是什么问题?
答案 0 :(得分:0)
您的模拟方法getLayoutIdsFromTemplate
正在接收键入的HashMap<String, Object>
参数,而不是简单的HashMap
。这是InvalidUseOfMatchersException
的原因。
如果你可以做一点重构,你可以解决它:
1)将您的方法更改为接收Map<String, Object>
而不是Hashmap<String, Object>
:
public List<String> getLayoutIdsFromTemplate(Map<String, Object> parsedTemplate) {
...
}
2)在测试类中,使用Mockito.anyMapOf(String.class, Object.class))
代替Mockito.any(HashMap.class))
匹配参数:
when(templateParser.getLayoutIdsFromTemplate(anyMapOf(String.class, Object.class))).thenReturn(Arrays.asList("id1", "id1"));
希望它有所帮助。