org.mockito.exceptions.misusing.InvalidUseOfMatchersException:错位参数匹配器

时间:2014-07-16 03:20:30

标签: java unit-testing error-handling mockito dropwizard

我的代码

@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().

我不理解这些描述。我是如何正确测试的?

2 个答案:

答案 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

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