Mockito Verify报Wanted but not invoked错误,mock零交互问题排查求助
Mockito 报错原因分析
以下是导致Wanted but not invoked错误的核心问题,以及其他需要修正的代码错误:
- 测试执行顺序错误(核心报错原因)
Mockito.verify的作用是验证mock方法已经被调用,你将校验逻辑放在了被测方法执行和打桩逻辑之前,此时mock对象还没有产生任何交互,自然触发无调用的报错。正确的测试执行顺序为:先完成mock方法打桩 -> 执行被测业务方法 -> 最后做调用校验。 - 业务类变量拼写笔误
serviceclass中注入的成员变量名为rclass,但doMethod方法里调用时误写为rlcass,该错误会导致注入的mock对象无法被正确调用,也是潜在的报错诱因。 - 测试方法不符合JUnit规范
你的测试方法缺少@Test注解,JUnit不会识别该方法为测试用例执行,同时方法定义缺少参数括号,不符合Java语法要求。
修正后参考代码
单元测试类核心逻辑修正
@RunWith(MockitoJUnitRunner.class) public class testclass{ @InjectMocks private serviceclass sclass; @Mock MessageReplyingSender rclass; @Test public void test() throws Exception{ // 1. 先对mock方法打桩 Mockito.when(rclass.something(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyLong())).thenReturn("gh"); // 2. 执行被测业务方法 sclass.doMethod(); // 3. 最后校验mock方法调用 Mockito.verify(rclass).something(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyLong()); } }
业务类拼写修正
@Service public class serviceclass{ @Autowired MessageReplyingSender rclass; public void doMethod(){ // 修正变量拼写错误 Object o = rclass.something("hey","hey",null,1000); } }
内容的提问来源于stack exchange,提问作者Rishabh
相关产品推荐
相关产品推荐

