Mockito 3 any() 严格存根参数不匹配

Mockito 3 any() Strict stubbing argument mismatch

我正在使用 Mockito 3.1.0。

我正在尝试使用以下语法模拟我的方法:

when(mockedObject.myMethod(any(HttpServletRequest.class)).thenReturn(1);

myMethod 就是:

public Integer myMethod(HttpServletRequest request) {
    return 0;
}

在我正在测试的方法中,它被简单地调用了:

int r = myObject.myMethod(request);

但我得到:

org.mockito.exceptions.misusing.PotentialStubbingProblem: 
Strict stubbing argument mismatch. Please check:
 - this invocation of 'myMethod' method:
    mockedObject.myMethod(null);
    -> at somefile.java:160)
 - has following stubbing(s) with different arguments:
    1. mockedObject.myMethod(null);
      -> at somefileTest.java:68)

如解释的那样here any(myClass) doesn't work if the provided argument is null, only any() does as explained here。就我而言,request 为空,因此 any(HttpServletRequest.class) 无法捕获它。 我通过更改

修复了它
when(mockedObject.myMethod(any(HttpServletRequest.class)).thenReturn(1);

如果您确定它将为 null

when(mockedObject.myMethod(null)).thenReturn(1);

如果你想捕获所有情况,或者到这个

when(mockedObject.myMethod(any())).thenReturn(1);

另一种方法是使用ArgumentMatchers:

when(mockedObject.myMethod(ArgumentMatchers.<HttpServletRequest>any())).thenReturn(1);

感谢@xerx593 的解释。