升级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模式:- 在测试资源目录里建
src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker文件 - 文件里只写一行
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
相关产品推荐
相关产品推荐

