在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
相关产品推荐
相关产品推荐

