Mockito:argThat 用于采用多个参数的方法

Man*_*oid 3 java unit-testing mockito

我正在尝试使用 Mockito 的 argThat API:

verify(mockService).methodA(argThat((List ids, int b) -> ids.get(0).equals("123")));
Run Code Online (Sandbox Code Playgroud)

mockService 有methodAwhich 需要两个参数:一个 List 和一个原始整数。

但这给了我一个错误:

“lambda 表达式中的参数类型不兼容”。

原因是 ArgumentMatcher 的matches 方法只接受一个参数。

那么对于这种场景,我该如何进行验证呢?

Mac*_*ski 6

您应该argThat为每个输入使用通配符:

verify(mockService).methodA(argThat((List ids) -> ids.get(0).equals("123"))
          , argThat((int b) -> b < 1);
Run Code Online (Sandbox Code Playgroud)

我还建议您使用@ArgumentCaptorwhich 作为替代方法argThat并使自定义匹配更加清晰:javadoc。特别是如果您必须在同一个条件语句中使用这两个参数。