org.mockito.exceptions.misusing.错误的参数匹配器



我的代码

@Path("/apiajax/*/*")
@GET
public String handleFooJson(@Context UriInfo context) {
    return null;
}

我的测试是

Mockito.when(Bar.handleFooJson(Mockito.any(UriInfo.class))).thenReturn(null);

I got error

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Misplaced argument matcher detected here: Mockito.when(Bar.handleFooJson(Mockito.any(UriInfo.class))).thenReturn(null); 
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"))
Also, this error might show up because you use argument matchers with methods that cannot be mocked.
Following methods *cannot* be stubbed/verified: final/private/equals()/hashCode().
我不明白这个描述。如何正确地测试它?

我没有足够的观点来添加评论,但我想添加,请检查您正在嘲笑一些可以被嘲笑的方法。请在错误中阅读

同样,这个错误可能会出现,因为您对不能>模拟的方法使用参数匹配器。以下方法不能被存根/验证: final/private/equals()/hashCode()

静态方法也不能被嘲笑,我认为这里就是这种情况。

Mockito.when(Bar.handleFooJson(Mockito.any(UriInfo.class))).thenReturn(null);

Bar看起来像一个类而不是一个对象。

如果你在类中有要mock的final方法,那么

我们需要添加一个名为org.mockito.plugins.MockMaker的文本文件到项目的src/test/resources/mockito-extensions目录,并添加一行文本:

mock-maker-inline

请参考文章https://www.baeldung.com/mockito-final

相关内容

  • 没有找到相关文章

最新更新