久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Powermock靜態方法怎么使用

176次閱讀
沒有評論

共計 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字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 广南县| 西乌珠穆沁旗| 宁国市| 新巴尔虎左旗| 龙陵县| 红桥区| 子洲县| 托克托县| 岱山县| 清苑县| 鸡泽县| 灵武市| 清远市| 静乐县| 昌吉市| 扶沟县| 临汾市| 广丰县| 南皮县| 如东县| 石屏县| 晋州市| 南通市| 大冶市| 迁西县| 嘉定区| 苍梧县| 工布江达县| 佳木斯市| 武夷山市| 抚州市| 武陟县| 宁津县| 郧西县| 普陀区| 宁陕县| 德兴市| 景东| 普格县| 海林市| 天气|