org.mockito.exceptions.missing.InvalidUseOfMatchersException



我得到以下异常

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"));

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新