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

在NetBeans中使用Mockito调用静态方法时遇到的问题

问题分析

你用@Mock注解创建了ManagerPageFlowScope实例mpfs,但调用静态方法getInstance()时始终返回null——这是因为Mockito默认无法mock静态方法,@Mock只能处理实例方法,静态方法属于类本身,和你创建的mpfs实例完全无关,原类的getInstance()逻辑没被替换,自然返回null。

解决方案

要mock静态方法,需用Mockito 3.4.0及以上版本提供的mockStaticAPI,调整后的测试代码如下:

@Mock
ManagerPageFlowScope mpfs;

@Test
public void mostrarSeriesTest() {
    ArrayList<Serie> list = new ArrayList<Serie>();
    Serie s = new Serie("Test01", "N");
    Long l = Long.parseLong("59960000");
    Etiqueta e = new Etiqueta(l);
    list.add(s);

    // 用try-with-resources包裹静态mock,确保测试后自动清理
    try (MockedStatic<ManagerPageFlowScope> mockedStatic = Mockito.mockStatic(ManagerPageFlowScope.class)) {
        // 指定静态方法getInstance()返回我们mock的实例mpfs
        mockedStatic.when(ManagerPageFlowScope::getInstance).thenReturn(mpfs);
        // 再mock实例方法的返回值
        when(mpfs.getParamPageFlowScope("consultaSerie")).thenReturn(e);

        // 这里执行你的测试逻辑,比如调用被测方法
    }
}
关键注意点
  • 必须用try-with-resources管理MockedStatic,避免静态mock污染其他测试用例。
  • 旧版Mockito不支持原生静态mock,要么升级版本,要么用PowerMock(但PowerMock会增加测试复杂度,优先推荐前者)。
  • 原代码中mpfs.getInstance()的写法逻辑错误,静态方法应通过类名调用,而非实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:25:37