欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Powermock靜態(tài)方法怎么使用

本篇內(nèi)容主要講解“Powermock靜態(tài)方法怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Powermock靜態(tài)方法怎么使用”吧!

成都創(chuàng)新互聯(lián)2013年至今,先為河南等服務(wù)建站,河南等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為河南企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

Mockito 很強大, 但是它不支持靜態(tài)方法.所以, 就用Powermock了. 要測試的對象是Controller中的接口, 對單元測試來說, 這個待測試的街口應(yīng)該是一個白盒的. 所以, 其中的第三方(service,其他靜態(tài)類)的調(diào)用都應(yīng)該使用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靜態(tài)類:  
```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));

先說下這句的意思, 這句(后面簡稱靜態(tài)校驗)就是對靜態(tài)方法的調(diào)用次數(shù)做了校驗. 光看命名就能想通. 但是要注意的是, 這里的3指的是在靜態(tài)校驗之前的調(diào)用次數(shù). 如果靜態(tài)校驗執(zhí)行的次數(shù)不等于這個次數(shù), 那么靜態(tài)校驗后面的靜態(tài)方法就不能再執(zhí)行了. 上面代碼中, 在這句前一共執(zhí)行了三次HelloUtil.hi(); 兩次是主動明文執(zhí)行的, 一次是在mainController.hello()里面執(zhí)行的. 如果注釋掉某一個, 那么就會看到日志打印:

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

這里只校驗靜態(tài)校驗之前的執(zhí)行次數(shù), 后面執(zhí)行多少次都沒關(guān)系. 另外, 還有一點要注意的是, 在校驗語句前, 我們前面給方法mock的返回值是有效的, 在校驗之后就沒效果了. 
所以, 我們對靜態(tài)方法的測試, 應(yīng)該是放在verifyStatis之前進行的.  在校驗之后的執(zhí)行, 是為了證明我們之前的校驗是ok的.

校驗之后的靜態(tài)方法調(diào)用, 是一定要有的. 要不然是測試不出調(diào)用次數(shù)的. 參見下面代碼:

@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.

所以, 對靜態(tài)方法調(diào)用次數(shù)的校驗一定是verifyStatis和之后的顯示調(diào)用一起來進行的. 最后的最后, 再提一句:  如果同時有多個靜態(tài)方法調(diào)用. 如果都要驗證調(diào)用次數(shù), 那么應(yīng)該分別像下面這樣使用多次:

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

到此,相信大家對“Powermock靜態(tài)方法怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享標題:Powermock靜態(tài)方法怎么使用
本文地址:http://chinadenli.net/article40/gjsceo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊自適應(yīng)網(wǎng)站、定制網(wǎng)站網(wǎng)站排名、ChatGPTApp開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司