编写Java单元测试遇到static修饰的类或方法应该怎么处理

0.前情提要

我们在编写Java单元测试时,经常使用when().thenReturn()来返回假数据,当我们遇到public static修饰的类时,会发现使用when、thenReturn来返回假数据会出现NPE,也就是空指针异常,但是这个static方法内还存在查询数据库等操作,那么我们就需要如下的方法进行解决。

1.解决

使用 Mockito 5+(内置静态方法 Mock 支持)

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>5.2.0</version>
    <scope>test</scope>
</dependency>
import static org.mockito.Mockito.*;

@Test
void testStaticMethod() {
    try (MockedStatic<MyClass> mockedStatic = mockStatic(MyClass.class)) {
        // Mock 静态方法
        mockedStatic.when(() -> MyClass.staticMethod("arg"))
                   .thenReturn("mockedValue");

        // 调用测试代码
        String result = MyClass.staticMethod("arg");
        assertEquals("mockedValue", result);
    }  // 自动关闭 Mock(避免影响其他测试)
}

但是注意此方法只支持Mockito 5+,其他并未进行测试,如果不便切换版本的小伙伴请自行测试。

用云无忧
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 共1条

请登录后发表评论

    • Level0的头像-零一物语Level0徽章-打卡狂魔-零一物语等级-LV6-零一物语作者0