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

PowerMock.whenNew模拟Gson实例无效问题求助

解决PowerMockito whenNew模拟Gson构造函数不生效的问题

你遇到的问题是PowerMockito的whenNew没有正确拦截Gson的构造调用,导致实际创建了真实实例。我帮你梳理下几个关键问题和修复方案:

一、先修正代码里的拼写错误

你的测试代码里有两处拼写错误,这会直接导致Mock配置不生效:

  • thenThow → 正确写法是thenThrow
  • whithNoArguments → 正确写法是withNoArguments

二、PowerMockito模拟构造函数的核心配置要求

要让whenNew生效,必须满足两个必要条件:

  • 测试类需要添加@RunWith(PowerMockRunner.class)注解(适配JUnit4),如果用JUnit5则替换为@ExtendWith(PowerMockExtension.class)
  • 添加@PrepareForTest注解,指定包含new Gson()调用的业务类(注意:不是Gson类本身,而是你编写的、里面执行new Gson()逻辑的类)

三、修正后的完整测试代码示例

假设你的业务类是JsonProcessingService,里面包含调用new Gson()的逻辑,测试代码应该这样写:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.google.gson.Gson;

@RunWith(PowerMockRunner.class)
// 这里填写包含new Gson()的业务类,比如你的JsonProcessingService
@PrepareForTest(JsonProcessingService.class)
public class JsonProcessingServiceTest {

    @Test(expected = NullPointerException.class)
    public void testGsonToJsonThrowsException() throws Exception {
        // 1. 创建Gson的Mock实例
        Gson mockGson = PowerMockito.mock(Gson.class);
        // 2. 配置Mock实例的toJson方法抛出指定异常
        PowerMockito.when(mockGson.toJson(PowerMockito.any())).thenThrow(new NullPointerException("message"));
        // 3. 拦截Gson的无参构造调用,返回Mock实例
        PowerMockito.whenNew(Gson.class).withNoArguments().thenReturn(mockGson);
        
        // 4. 调用业务方法(该方法内部会执行new Gson())
        JsonProcessingService service = new JsonProcessingService();
        service.processObjectToJson(new Object());
    }
}

四、额外注意事项

  • 避免在测试类直接执行new Gson():如果测试代码里直接写Gson gson = new Gson();,且这段代码不在@PrepareForTest指定的类中,PowerMockito无法拦截这个构造调用。必须让new Gson()发生在你要测试的业务类里,通过调用业务方法触发。
  • 修复变量重复定义问题:你的原代码里两次定义了Gson gson,这属于编译错误,需要修改变量名区分(比如mockGson)。
  • 版本适配:确保PowerMock依赖版本与你使用的JUnit版本匹配,避免因版本不兼容导致Mock失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:32:31