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

使用Mockito Mock @Autowired Service时出现Wanted but not invoked错误如何解决

问题排查与修正

你的测试代码存在以下4处核心问题:

  • 没有声明要测试的AppController实例,也没有将Mock出来的DbCacheService实例注入到Controller中
  • 测试方法中没有触发AppController.refreshCache()的调用逻辑,直接执行Mockito校验,自然会提示dbCacheService.refreshCache()未被调用
  • 存在冗余的初始化逻辑:你已经使用@ExtendWith(MockitoExtension.class)开启了Mockito对JUnit5的支持,不需要再手动调用MockitoAnnotations.initMocks(this);同时@BeforeMethod是JUnit4/TestNG的注解,JUnit5对应的前置方法注解为@BeforeEach,该方法完全可以删除
  • 测试类命名不匹配:当前测试类名为SmsControllerTest,但实际测试的是AppController,建议修改命名避免后续维护混淆

修正后可正常运行的测试代码

@ExtendWith(MockitoExtension.class)
class AppControllerTest {

    @Mock
    private DbCacheService dbCacheService;

    // @InjectMocks会自动将上面声明的Mock对象注入到AppController实例中
    @InjectMocks
    private AppController appController;

    @Test
    void refreshCache() {
        // 先调用Controller的刷新缓存接口
        String result = appController.refreshCache();
        // 校验接口返回值符合预期
        org.junit.jupiter.api.Assertions.assertEquals("DB Cache Refresh completed", result);
        // 再校验DbCacheService的refreshCache方法确实被调用了1次
        org.mockito.Mockito.verify(dbCacheService, org.mockito.Mockito.times(1)).refreshCache();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:45:04