我的代码
@Path("/apiajax/*/*")
@GET
public String handleFooJson(@Context UriInfo context) {
return null;
}
我的测试是
Mockito.when(Bar.handleFooJson(Mockito.any(UriInfo.class))).thenReturn(null);
我收到了错误
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().
我不理解这些描述。我是如何正确测试的?
答案 0 :(得分:2)
我没有足够的意义来添加评论,但我想补充一点,请检查您是否在嘲笑某些可以嘲笑的方法。请在错误中阅读
此外,此错误可能会显示,因为您使用参数匹配器的方法不能>被嘲笑。 以下方法无法存根/验证:final / private / equals()/ hashCode()。
静态方法也不能被模拟,我认为就是这种情况。
Mockito.when(Bar.handleFooJson(Mockito.any(UriInfo.class))).thenReturn(null);
Bar看起来像一个Class而不是一个对象。
答案 1 :(得分:0)
如果你在类中有你正在嘲笑的最终方法
我们需要在项目的 src/test/resources/mockito-extensions 目录下添加一个名为 org.mockito.plugins.MockMaker 的文本文件并添加一行文本:
mock-maker-inline