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

使用Mockito@InjectMocks初始化Example实例时抛出异常求助

问题解决思路

首先明确问题:你用@InjectMocks时,Mockito会自动尝试创建Example实例,但你的Example无参构造里调用super(Example.class)抛出了异常,导致实例化失败。

几种可行的解决办法:

1. 手动实例化+手动注入依赖

跳过Mockito自动创建实例的逻辑,自己处理构造过程,再把Mock的依赖注入进去:

public class Test{
    // 如果Example或父类需要依赖,先Mock出来
    @Mock
    private ParentRequiredDependency mockParentDep;

    private Example example;

    @BeforeMethod
    public void setUp(){
        MockitoAnnotations.initMocks(this);
        // 手动处理构造,捕获异常排查问题
        try {
            example = new Example();
            // 如果需要给Example或父类注入依赖,用Setter或者反射赋值
            // example.setParentDep(mockParentDep);
        } catch (Exception e) {
            // 打印异常栈,定位父类构造抛异常的具体原因
            e.printStackTrace();
            throw new RuntimeException("创建Example实例失败", e);
        }
    }
}

2. 用@Spy代理已初始化的实例

如果必须保留现有构造逻辑,先自己成功创建Example实例,再让Mockito把它转为Spy对象:

public class Test{
    @Spy
    private Example example;

    @BeforeMethod
    public void setUp(){
        try {
            // 先手动创建实例,确保构造不抛异常
            example = new Example();
            // 初始化Mockito注解
            MockitoAnnotations.initMocks(this);
        } catch (Exception e) {
            throw new RuntimeException("初始化Example Spy失败", e);
        }
    }
}

3. 排查并修复父类构造的异常根源

最根本的是搞清楚super(Example.class)为什么会抛异常:

  • 检查父类构造函数对传入的Class参数有没有校验逻辑(比如是否允许传入当前子类的Class)
  • 查看父类构造里有没有其他可能抛出异常的代码(比如IO操作、未初始化的静态资源等)
  • 尝试调整传入父类的参数,比如换成其他合法的Class对象,看是否能正常构造

内容的提问来源于stack exchange,提问作者Pavan kalyan athukuri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:51:02