java - Mockito - InvalidUseOfMatchersException

标签 java service mocking mockito

我已经尝试调试这段代码一段时间了,但仍然没有成功。我继续专门为此代码抛出“InvalidUseOfMatchersException”:

对于设置:

        service = mock(Service.class);
        newRequest = mock(Request.class);
        when(service.newRequest(anyString(), anyString(), anyString())).thenReturn(
            newRequest);

并且在使用该服务的类中:

 Request newRequest = Service.newRequest(
            mId, "mp", itemID);

我假设它失败了,因为我在 when...thenReturn 子句中传入了 3 个“anyString()”,但也可能是它在硬编码的“mp”上失败了。所以我试图用这个替换 when 子句:

when(service.newRequest(anyString(), eq("mp"), anyString())).thenReturn(
            newRequest);

但仍然收到 InvalidUseOfMatchersException。

我是否遗漏了一些关于 mockito 应该如何为此工作的信息?

全栈:

    org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
3 matchers expected, 2 recorded.
This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.
    at ServiceFacade.getSimilarities(ServiceFacade.java:29)
    at FacadeTest.getSimilarities(FacadeTest.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodImpl.invoke(DelegatingMethodImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)

最佳答案

基于此语法:

Service.newRequest(mId, "mp", itemID);

看起来 newRequest 是一个静态方法。 Mockito 本质上是通过子类化(实际上生成动态代理)来工作的,因此它不适用于静态方法,因为不能通过子类化来覆盖静态方法。出于类似的原因,Final 方法不可模拟。

如果那是正确的,切换到工厂对象而不是工厂方法,这将使您模拟工厂的实例,或使用 Powermock模拟静态字段。

关于java - Mockito - InvalidUseOfMatchersException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418778/

相关文章:

mocking - OpenAPI 3.0 模拟生成器

java - Mockito:使用 "thenReturn"中的方法返回模拟不起作用

java - Fragment.instantiate致命异常

parsing - 如何使用 JavaMail API 解析 Mbox 文件?

java - 线程 “main”中的异常java.io.IOException:打开作业jar时出错:hadoop中的ex.jar

android - 将数据从服务发送到 Activity ?

service - Grpc 服务器在作为 Windows 服务运行时不监听端口 5001

python - 如何使单元测试模拟代码对每个 spark worker 节点(进程)生效

java - RabbitMQ 凭证与有效信息无效

wpf - 客户服务架构