You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mockito是否存在not类型ArgumentMatcher?多排除值验证咨询

Mockito 处理long类型参数排除的标准方案

单个值排除:用原生not() + eq()匹配器

你提到的找现成匹配器的需求,Mockito其实早就支持啦!不用自己写longThat()加lambda,直接用通用的not()匹配器包装eq()就可以实现,因为eq()本身支持long类型参数:

verify(mObject).verifiedMethod(not(eq(longValueThatShouldBeAvoided)));

这里的not()是Mockito核心匹配器里的通用否定工具,它可以包裹任何其他匹配器(包括基本类型的eq()),语义非常清晰——直接表达“不是这个特定long值”的意思,比自定义lambda更符合Mockito的标准写法。

多个值排除:用AdditionalMatchers组合逻辑匹配器

如果需要排除多个long值,官方的标准方案是借助AdditionalMatchers类里的逻辑匹配器,把多个eq()用or()组合起来,再用not()取反:

import org.mockito.AdditionalMatchers;

// 排除val0和val1两个long值
verify(mObject).verifiedMethod(not(AdditionalMatchers.or(eq(val0), eq(val1))));

如果要排除更多值,只需要继续在or()里添加eq()参数就行。这个写法的优势在于完全使用Mockito官方提供的匹配器,可读性和可维护性都比自定义lambda更高,尤其是在团队协作场景下,其他熟悉Mockito的开发者一眼就能看懂你的意图。

当然,你之前用longThat(arg -> arg != val0 && arg != val1)的写法本身是可行的,但官方匹配器方案更贴合Mockito的设计理念,也更简洁。

内容的提问来源于stack exchange,提问作者EnzoMolion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:38:10