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 的解释。
我正在使用 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 的解释。