千家信息网

Powermock静态方法怎么使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"Powermock静态方法怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Powermock静态方法怎么使用"吧!Mockito
千家信息网最后更新 2026年11月02日Powermock静态方法怎么使用

本篇内容主要讲解"Powermock静态方法怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Powermock静态方法怎么使用"吧!

Mockito 很强大, 但是它不支持静态方法.所以, 就用Powermock了. 要测试的对象是Controller中的接口, 对单元测试来说, 这个待测试的街口应该是一个白盒的. 所以, 其中的第三方(service,其他静态类)的调用都应该使用mock对象来stub起来. 下面是## 示例代码(随手写的,说明问题就行):

Controller:

@Controllerpublic class MainController {    @Autowired    private MainService mainService;    @GetMapping("/hello")    public String hello(){        mainService.hello();        String result = HelloUtil.hi();        if(result.equals("hi")){            return "ok";        }else {            return "fail";        }    }}

Service:

/** * Created by icer on 2017/10/13. */@Service public class MainService {    public String hello(){        System.out.println("hello");        return "hello";    }}Util静态类:  ```javapublic class HelloUtil {    public static String hi(){        return "hi";    }}

我们要测试的是MainController中的hello方法.

再次注意, 是hello方法,不是hello接口. 我们的测试类:

@RunWith(PowerMockRunner.class)@PrepareForTest(HelloUtil.class)public class MainControllerTest {    [@Mock](https://my.oschina.net/mock)    private MainService mainService;    @InjectMocks    private MainController mainController;    [@Test](https://my.oschina.net/azibug)    public void helloTest(){        PowerMockito.when(mainService.hello()).thenReturn("hello");        PowerMockito.mockStatic(HelloUtil.class);        PowerMockito.when(HelloUtil.hi()).thenReturn("hi");        HelloUtil.hi();        HelloUtil.hi();        String result = mainController.hello();        PowerMockito.verifyStatic(Mockito.times(3));        HelloUtil.hi();        HelloUtil.hi();        HelloUtil.hi();     // mainController.hello();        assertEquals(result, "ok");    }}

我们着重看的是上面的HelloUtil.hi()方法.

PowerMockito.verifyStatic(Mockito.times(3));

先说下这句的意思, 这句(后面简称静态校验)就是对静态方法的调用次数做了校验. 光看命名就能想通. 但是要注意的是, 这里的3指的是在静态校验之前的调用次数. 如果静态校验执行的次数不等于这个次数, 那么静态校验后面的静态方法就不能再执行了. 上面代码中, 在这句前一共执行了三次HelloUtil.hi(); 两次是主动明文执行的, 一次是在mainController.hello()里面执行的. 如果注释掉某一个, 那么就会看到日志打印:

org.mockito.exceptions.verification.TooLittleActualInvocations: cn.com.hanbinit.utils.HelloUtil.hi();Wanted 3 times but was 2 times.

这里只校验静态校验之前的执行次数, 后面执行多少次都没关系. 另外, 还有一点要注意的是, 在校验语句前, 我们前面给方法mock的返回值是有效的, 在校验之后就没效果了.
所以, 我们对静态方法的测试, 应该是放在verifyStatis之前进行的. 在校验之后的执行, 是为了证明我们之前的校验是ok的.

校验之后的静态方法调用, 是一定要有的. 要不然是测试不出调用次数的. 参见下面代码:

@Test    public void helloTest(){        PowerMockito.when(mainService.hello()).thenReturn("hello");        PowerMockito.mockStatic(HelloUtil.class);        PowerMockito.when(HelloUtil.hi()).thenReturn("hi");        String result = HelloUtil.hi();        String hi = HelloUtil.hi();        PowerMockito.verifyStatic(Mockito.times(4));        assertEquals(result, "hi");    }

像上面这段代码, 测试是通过的. 改成下面这样:

@Test    public void helloTest(){        PowerMockito.when(mainService.hello()).thenReturn("hello");        PowerMockito.mockStatic(HelloUtil.class);        PowerMockito.when(HelloUtil.hi()).thenReturn("hi");        String result = HelloUtil.hi();        String hi = HelloUtil.hi();        PowerMockito.verifyStatic(Mockito.times(4));        HelloUtil.hi();        assertEquals(result, "hi");    }

就能看到日志:

org.mockito.exceptions.verification.TooLittleActualInvocations: cn.com.hanbinit.utils.HelloUtil.hi();Wanted 4 times but was 2 times.

所以, 对静态方法调用次数的校验一定是verifyStatis和之后的显示调用一起来进行的. 最后的最后, 再提一句: 如果同时有多个静态方法调用. 如果都要验证调用次数, 那么应该分别像下面这样使用多次:

PowerMockito.verifyStatic(Mockito.times(4));HelloUtil.hi();

到此,相信大家对"Powermock静态方法怎么使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

静态 方法 次数 测试 代码 内容 对象 接口 日志 是在 学习 实用 强大 更深 有效 主动 没关系 兴趣 再次 单元 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技学校 互联网科技深圳 深圳齐家互联网科技 互联网养老 桔豆科技 四个字互联网科技公司取名 青海省互联网新科技 北京华百购互联网科技有限公司 厦门比较好的科技互联网公司 亳州好赞互联网科技有限公司 畅思互联网科技 中国互联网公司排名锤子科技 智帮互联网科技公司最近动向 宇信科技在杭州互联网排第几 福建互联网展示科技馆设计 广西科技产业互联网是什么 张家口科技产业互联网平台 互联网时代高科技布局 广州三三互联网科技有限公司 安徽零酒互联网科技有限公司 杭州融税互联网科技有限公司 互联网科技公司简介 互联网科技有限公司图片 壕鑫互联网络科技 米客互联网科技 互联网前沿科技 佩信高科技互联网 互联网系的金融科技公司 苏州铭阳互联网科技有限公司 工业互联网展湾科技股份有限公司 株洲百竞科技的互联网营销顾问
0