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

问题描述 投票:0回答:2

我正在使用 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)
java mockito stub
2个回答
6
投票

here所解释,如果提供的参数为空,

any(myClass)
不起作用,只有
any()
可以
,如here所解释。就我而言,
request
为空,因此
any(HttpServletRequest.class)
无法捕获它。 我通过更改修复了它

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

如果你确定它会是空的话

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

或者如果您想捕获所有案例,请执行此操作

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

另一种方法是使用

ArgumentMatchers
:

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

感谢@xerx593 的解释。


0
投票

您可以使用

nullable(MyClass.class)
接受
null
或给定类型。

我认为这是最早出现的(v2.5.0),但在 Mockito 3 和最新版本(v5.8.0)中也可用

但是,您不太可能未使用过

HttpServletRequest request
,因此为了避免 NullPointerException,您可能需要模拟它,而不是允许它在测试中为空。

© www.soinside.com 2019 - 2024. All rights reserved.