本篇內容主要講解“Powermock靜態方法怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Powermock靜態方法怎么使用”吧!
成都創新互聯2013年至今,先為河南等服務建站,河南等地企業,進行企業商務咨詢服務。為河南企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
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靜態方法怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
分享標題:Powermock靜態方法怎么使用
本文地址:http://vcdvsql.cn/article40/gjsceo.html
成都網站建設公司_創新互聯,為您提供域名注冊、自適應網站、定制網站、網站排名、ChatGPT、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯