You need to enable JavaScript to run this app. Mockito 3.x 中如何禁止对指定类进行Mock?
优惠活动
大模型
产品
解决方案
定价
更多

Mockito 3.x 中如何禁止对指定类进行Mock?

Mockito 3.x 禁止指定类被Mock的实现方法

Mockito 3.x 原生支持针对指定类的Mock拦截禁止,不需要额外做侵入式的类结构设计,具体实现路径按版本分支分为两类:

3.5.0及以上3.x分支的原生实现

  • 框架从3.5.0版本开始内置了Mock排除校验能力,不需要引入额外自定义组件
  • 全测试全局配置可以通过实现org.mockito.configuration.MockitoConfiguration接口,重写excludeClassesFromMocking()方法,将需要禁止被Mock的类列表返回给框架,全局生效
  • 单个测试类的临时隔离场景,可以通过MockitoFramework实例调用addMockedTypeExclusion()、addStaticExclusion()方法,为当前测试上下文单独配置禁止Mock的类型
  • 校验逻辑是在Mockito生成代理对象的前置链路执行的,只要被列入排除列表,不管是创建常规类Mock、还是拦截静态方法Mock,只要尝试生成对应Mock实例,就会直接抛出明确的框架校验异常,阻断违规Mock的生成

3.5.0之前3.x分支的兜底实现

如果使用的是3.5.0之前的3.x版本,没有内置的排除API,可以通过自定义MockMaker实现类做前置拦截:

  • 重写createMock方法的入口逻辑,先做类型校验,匹配到禁止Mock的类直接抛出明确的自定义异常,阻断后续的代理生成流程
  • 可以将禁止Mock的类集合和团队开发规范绑定,比如核心工具类、全局配置类、单例枚举类这类明确不允许替代真实依赖的类型,统一维护到校验集合中

这类基于Mock生成链路的校验规则,和类本身是否是final、是否包含静态方法无关,不会被mockito-inline的代理增强能力绕过,可靠性远高于传统的“将类设计为带静态方法的final类”的防mock方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 21:06:04