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

jMockit中非测试类@Mocked修饰的mock对象未初始化问题咨询

JMockit @Mocked注解作用范围问题解答

核心原因

你遗漏了@Mocked注解的作用范围规则:
JMockit 中@Mocked的自动初始化能力仅对两类字段生效:

  • 包含@Test方法的测试类本身的@Mocked成员字段
  • 测试方法内声明的Expectations、Verifications等JMockit内置匿名类的字段

你自定义的FakeLogger属于继承MockUp的独立实现类,不在JMockit的自动注入扫描范围内,因此类内部的@Mocked Logger logger不会被自动初始化,默认值为null,这是你第一次实现触发空指针的根本原因。

更简洁的实现方案

你不需要单独定义MockUp子类,直接在测试代码中Mock静态方法的返回值即可,示例如下:

public class MyTest {   
    @Mocked Logger logger;

    @Test
    public void test() {
        new Expectations(Logger.class) {{
            // Mock静态方法getLogger的返回值
            Logger.getLogger();
            result = logger;
            // 定义方法调用预期
            logger.warn("message");
            times = 1;
        }};
        // 此处执行被测代码即可
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:01