我的代码
@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