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

JUnit 5与Mockito中assertThrows()抛出NullPointerException而非预期异常

问题原因及解决方案

问题根源

测试类中错误使用@Spy和@InjectMocks注解创建MyService实例是核心问题。MyService是无依赖的简单类,完全不需要Mockito的代理对象(Spy)参与测试。Spy的代理机制会干扰真实方法执行逻辑,导致传入null参数时,Mockito代理层提前抛出NullPointerException,并未进入你编写的invoke方法的空值判断逻辑。

修复方案

移除所有Mockito相关注解,直接实例化MyService对象即可完成测试:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertThrows;

public class AxwApplicationTest {
    private MyService myServiceToTest = new MyService();

    @Test
    public void invoke_ShouldThrow_MyCustomException() {
        assertThrows(MyCustomException.class, () -> {
            myServiceToTest.invoke(null);
        });
    }
}

额外说明

如果后续MyService需要依赖其他类,再考虑使用@InjectMocks配合@Mock注入依赖。当前场景下,Maven依赖中的mockito-core、mockito-junit-jupiter、mockito-inline都是多余的,仅保留junit-jupiter-api即可完成测试。

内容的提问来源于stack exchange,提问作者Michi-2142

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:01:01