<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • Powermock靜態(tài)方法怎么使用

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

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

            Mockito 很強(qiáng)大, 但是它不支持靜態(tài)方法.所以, 就用Powermock了. 要測(cè)試的對(duì)象是Controller中的接口, 對(duì)單元測(cè)試來(lái)說(shuō), 這個(gè)待測(cè)試的街口應(yīng)該是一個(gè)白盒的. 所以, 其中的第三方(service,其他靜態(tài)類(lèi))的調(diào)用都應(yīng)該使用mock對(duì)象來(lái)stub起來(lái). 下面是## 示例代碼(隨手寫(xiě)的,說(shuō)明問(wèn)題就行):

            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)類(lèi):  
            ```javapublic class HelloUtil {
                public static String hi(){
                    return "hi";
                }
            }

            我們要測(cè)試的是MainController中的hello方法.

            再次注意, 是hello方法,不是hello接口.  我們的測(cè)試類(lèi):

            @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));

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

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

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

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

            @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");
                }

            像上面這段代碼, 測(cè)試是通過(guò)的.  改成下面這樣:

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

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

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

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

            分享標(biāo)題:Powermock靜態(tài)方法怎么使用
            本文地址:http://www.jbt999.com/article40/gjsceo.html

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

            廣告

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

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

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 六月天婷婷 | 大香蕉小视频 | 粉嫩逼逼| 无码无卡| 青青草人人操人人摸人人干 |