gpt4 book ai didi

java - Mockito - InvalidUseOfMatchersException

转载 作者:行者123 更新时间:2023-11-29 08:47:25 28 4
gpt4 key购买 nike

我已经尝试调试这段代码一段时间了,但仍然没有成功。我继续专门为此代码抛出“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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com