Mockito Matchers.any(...) 只在一个参数上

2022-09-04 01:30:40

我想这样做:

 verify(function, Mockito.times(1)).doSomething(argument1, Matchers.any(Argument2.class));

其中,参数 1Argument1 类型的特定实例,而 argument2Argument2 类型的任何实例。

但是我收到一个错误:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:  Invalid use of argument matchers! 2 matchers expected, 1 recorded. This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String"); When using matchers, all arguments have to be provided by matchers. For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

按照这个建议,我可以写以下内容,一切都很好:

 verify(function, Mockito.times(1)).doSomething(Matchers.any(Argument1.class), Matchers.any(Argument2.class));

我正在寻找 Argument1 类型的任何参数和 Argument2 类型的任何参数。

如何实现这种期望的行为?


答案 1

有多个可能的参数匹配器,其中一个是 ,这在异常消息中提到。用:eq

verify(function, times(1)).doSomething(eq(arg1), any(Argument2.class));

(静态导入应该在那里 - 是)。eq()Matchers.eq()

你也有(这确实参考了平等,即),更一般地说,你可以写自己的匹配器。same()==


答案 2