文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Powermock静态方法怎么使用

2023-06-04 09:33

关注

本篇内容主要讲解“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:

@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静态方法怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯