我得到以下异常
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;
}
}
有人能告诉我问题出在哪里吗?
您的模拟方法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"));
希望能有所帮助。