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

升级mockito-core至3.4.6后测试失败,求解决NotAMockException

Mockito 升级后@SpyBean存根报NotAMockException的解决方法

先查版本兼容性

  • Mockito 3.4.6需要搭配Spring Boot 2.2.x及以上版本使用,如果你的Spring Boot版本低于2.2,要么把Spring Boot升级到兼容版本,要么考虑回退Mockito版本(不推荐后者)。

检查目标类/方法是否带final修饰

  • 如果MyInstance是final类,或者myMethod是final方法,Mockito 3.x默认的mock生成器没法创建spy代理,得开启inline模式:
    1. 在测试资源目录里建src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker文件
    2. 文件里只写一行mock-maker-inline

换种方式初始化Spy

  • 试试不用@SpyBean,手动创建Spy实例:
    @Autowired
    private MyInstance originalInstance;
    private MyInstance myInstance;
    
    @BeforeEach
    void setUp() {
        myInstance = Mockito.spy(originalInstance);
    }
    
    之后再执行你原来的存根代码就行。

强制Spring代理目标类

  • 如果MyInstance被Spring用JDK动态代理,可能导致Mockito不认它是spy,在@SpyBean里加proxyTargetClass = true,强制用CGLIB代理目标类:
    @SpyBean(proxyTargetClass = true)
    private MyInstance myInstance;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:15:29