【问题标题】:Mockito 3 any() Strict stubbing argument mismatchMockito 3 any() 严格的存根参数不匹配
【发布时间】:2021-08-13 17:14:51
【问题描述】:

我正在使用 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


【解决方案1】:

正如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 的解释。

【讨论】:

  • 还有一个新的 isNull ArgumentMatcher 也可以解决这个问题,如前所述,any 用于非空参数,isNull 现在用于空参数
猜你喜欢
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
相关资源
最近更新 更多