JUnit Mockito中when().thenReturn()抛出NullPointerException问题求助
单元测试NPE问题排查方案
核心原因及修复步骤
- Mockito注解未初始化,mock对象为null
你代码中的测试类仅标注了错误的@Runner注解,没有正确启用Mockito注解支持:- JUnit4场景需要给测试类添加
@RunWith(MockitoJUnitRunner.class)注解 - JUnit5场景需要给测试类添加
@ExtendWith(MockitoExtension.class)注解 - 也可以在测试前置方法中手动初始化注解:
@Before public void mockInit() { MockitoAnnotations.openMocks(this); }
@Mock修饰的class_a对象本身是null,调用when(class_a.fun_a(par))时操作空对象直接抛出NPE。 - JUnit4场景需要给测试类添加
- 方法参数定义/调用不匹配
你贴出的代码存在逻辑冲突:Class_b的fun_b方法内调用的是无参的class_a.fun_a(),但Class_a定义的fun_a是带参方法,测试类中mock的也是带参的fun_a(par),如果是实际代码的笔误请先修正参数数量的一致性。
如果入参是自定义类型,确保mock时传入的参数和实际调用时的参数满足equals匹配规则,否则可以用Mockito参数匹配器(如any(ParamType.class)、eq(paramObj))来做匹配。 - final类/方法导致mock失效
Mockito默认不支持mock final类、final方法,如果你的Class_a或者fun_a方法被final修饰,mock操作会失效,调用方法时会执行真实逻辑,若真实逻辑依赖空对象就会触发NPE。
内容的提问来源于stack exchange,提问作者Pawan Asipu
相关产品推荐
相关产品推荐

