我用的是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)
型
2条答案
按热度按时间sf6xfgos1#
正如这里所解释的,如果提供的参数为空,则**
any(myClass)
不起作用,只有any()
**会起作用。在我的例子中,request
为空,因此any(HttpServletRequest.class)
无法捕获它。我通过更改字符串
如果您确定它将为null,请将其转换为
型
如果你想抓住所有案例
型
另一种方法是使用
ArgumentMatchers
:型
感谢@xerx593的解释。
dsekswqp2#
可以使用
nullable(MyClass.class)
来接受null
或给定类型。这是我认为最早出现的版本(v2.5.0),但在Mockito 3和最新版本(v5.8.0)中也可以使用。
但是,您不太可能有未使用的
HttpServletRequest request
,因此为了避免NullPointerException,您可能希望模拟它,而不是允许它在测试中为空。