Mockito无法模拟HttpServletRequest接口异常原因咨询
Mockito无法Mock HttpServletRequest接口的原因分析
异常内容
org.mockito.exceptions.base.MockitoException: Mockito cannot mock this class: interface javax.servlet.http.HttpServletRequest.
Mockito can only mock non-private & non-final classes. If you're not sure why you're getting this error, please report to the mailing list.
原因拆解
- 核心问题:缺失Servlet API依赖
HttpServletRequest是Servlet规范中的接口,你的测试依赖仅包含JUnit和Mockito,没有引入Servlet API的依赖。Mockito在尝试创建该接口的Mock对象时,找不到对应的类定义,进而抛出了这个带有误导性的错误提示——实际上Mockito完全支持Mock接口,这个错误是类加载失败导致的误判。 - 版本适配无本质问题
你使用的Java 1.8、Gradle 5.5、JUnit4 4.12、Mockito-core 2.22.0版本组合本身是兼容的,不存在版本冲突导致的Mock失败问题。
验证逻辑
Mockito对接口的Mock支持是原生特性,只要类路径中存在该接口的类文件,就能正常生成Mock对象。当前错误的本质是HttpServletRequest类未被加载,才触发了通用错误提示。
解决方向
在Gradle的testImplementation依赖中添加Servlet API依赖即可,比如:
testImplementation 'javax.servlet:javax.servlet-api:3.1.0'
内容的提问来源于stack exchange,提问作者Ranjani-devz
相关产品推荐
相关产品推荐

