在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Powermock静态方法怎么使用

140次阅读
没有评论

共计 3067 个字符,预计需要花费 8 分钟才能阅读完成。

本篇内容主要讲解“Powermock 静态方法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“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 静态方法怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3067字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 一级大片在线观看 | 亚洲日韩欧洲无码a∨夜夜 亚洲日韩欧洲无码av夜夜摸 | 天天色天天射天天干 | 天天操人人干 | 一级欧美毛片成人免费视频 | 热综合一本伊人久久精品 | 免费无码又爽又刺激毛片 | 日本一级在线观看 | 成年人免费在线观看网站 | 激情欧美日韩一区二区 | 欧美国产日本精品一区二区三区 | 久久不见久久见免费影院 | 91麻豆高清国产在线播放 | 午夜免费视频观看在线播放 | 久久18禁高潮出水呻吟娇喘 | 人妻去按摩店被黑人按中出 | 九九九九热精品视频 | 无码专区人妻系列日韩精品 | 在线观看的黄网 | 亚洲福利视频网址 | 国产视频毛片 | 全黄性性激高免费视频 | 中文字幕不卡一区 | 国产日韩欧美一区二区三区在线 | 美女一区二区在线观看 | 亚洲综合第一欧美日韩中文 | 国内一级特黄女人精品毛片 | 日韩欧美在线一区二区三区 | 99视频国产热精品视频 | 国产在线精品99一卡2卡 | 日产亚洲一区二区三区 | 91系列在线观看免费 | aⅴ网站在线观看 | 国产精品嫩草影院一二三区入口 | 99国产精品99久久久久久 | 国产色无码精品视频国产 | 韩国一级毛片视频免费观看 | 国产a自拍| 久久天天操 | 高清在线精品一区二区 | 国产成人无码区免费内射一片色欲 |