国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Mockito是什么 什么情況下使用Mockito

ouxn_HW_Digital ? 來源:華為開發者社區 ? 作者:華為開發者社區 ? 2021-08-09 14:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

相信每一個程序猿在寫Unit Test的時候都會碰到一些令人頭疼的問題:如何測試一個rest接口;如何測試一個包含客戶端調用服務端的復雜方法;如何測試一個包含從數據庫讀取數據的復雜方法。。。這些問題mockito都可以幫我們輕松地解決。

Mockito是啥?

Mockito 是一個強大的用于 Java 開發的模擬測試框架, 通過 Mockito 我們可以創建和配置 Mock 對象, 進而簡化有外部依賴的類的測試。簡單來說,創建mock對象之后,這個對象里面的方法是怎么實現的可以不用去關心,我們只需要給這個方法定義一個輸入、輸出即可。

什么情況下使用Mockito:

假設現在要測試method A, method A里面又依賴Method B、Method C、Method D,而依賴的這3個method又不好去構建(如ObsClient需要真實AK SK,HttpClient需要構建客戶端與服務器,Database相對好構建,但是假設Method C只是從table1、table2聯合查詢,你還得分別往table1、table2 insert數據,很繁瑣),這時候可以考慮Mockito進行優雅測試,當然如果你想去構建真實的測試場景,未免有點舍本逐末了。

Mockito的使用:

1、引進依賴

Maven依賴如下:

《dependency》 《groupId》org.mockito《/groupId》 《artifactId》mockito-core《/artifactId》 《version》1.10.19《/version》 《scope》test《/scope》《/dependency》

代碼中:

import org.mockito.Mockito

2、創建Mock對象

這里需要注意的是scala中只能對伴生對象或者Class創建mock對象,不能直接對Object創建mock對象。Scala中使用Mockito.mock(classOf[…])來創建mock對象

class VpcClient {

def getRouteTable(projectId: String, token: String, url: String): Seq[RouteTable] = {

val header = Map(RequestAttributes.X_AUTH_TOKEN -》 token,

“Content-Type” -》 MediaType.APPLICATION_JSON)

val response = restClient.get(url, header)}}object VpcClient {

private lazy val _instance: VpcClient = new VpcClient(conf)

private var mockClient: VpcClient = _

def getInstance(): VpcClient = {

// Keep original logic for other ut, which didn‘t set mock client.

if (RuntimeEnvironment.isTesting && null != mockClient) {

return mockClient

}

_instance

}

// only used for UT

def setMockClient(vpcClient: VpcClient): Unit = {

mockClient = vpcClient

}

}

舉個例子,現在對VpcClient進行mock,從而可以調用VpcClient里面的getRouteTableList方法。

class UtilSuite { val vpcClient = Mockito.mock(classOf[VpcClient])

VpcClient.setMockClient(vpcClient)}

3、配置Mock對象

Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token,url)

當我們有了一個 Mock 對象后, 我們可以調用對象的方法,并且使用

Mockito.doReturn().when().method

,來設置當調用method時,在某輸入下返回某輸出。這里的輸入是要與 method真實的入參一致的,輸出也是要與method真實的返回參數一致。

class UtilSuite { val vpcClient = Mockito.mock(classOf[VpcClient])

VpcClient.setMockClient(vpcClient)

val projectId = “projectId”

val token = “token”

val url= “url”

val routeTableInfo = new RouteTableInfo

Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token, url)}

總結:

上面講了Mockito的使用場景,以及scala中怎么使用Mockito創建mock對象。與java中使用Mockito有些許的差別,這些如果感興趣的話都可以參考下官方文檔:

官網:

http://mockito.org

API文檔:

http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html

項目源碼:

https://github.com/mockito/mockito

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116430
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73965
  • REST
    +關注

    關注

    0

    文章

    33

    瀏覽量

    9893

原文標題:干貨| 干了這杯Mockito雞尾酒,讓你輕松進行單元測試

文章出處:【微信號:HW-DigitalHome,微信公眾號:華為數字家庭】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何設計好自動駕駛ODD?

    為確定自動駕駛的可使用范圍,會給自動駕駛設置一個運行設計域(Operational Design Domain,ODD)。ODD的作用就是用來明確自動駕駛在什么情況下能工作,在什么情況下不能工作,給車設定“工作范圍”。
    的頭像 發表于 01-24 09:27 ?1512次閱讀

    什么情況下用安規電容?

    安規電容指符合特定安規標準,在電容器失效后,不會導致電擊,不危及人身安危的電容器,根據應用場景和連接方式的不同,安規電容分為X電容和Y電容。
    的頭像 發表于 01-21 17:20 ?699次閱讀
    <b class='flag-5'>什么情況下</b>用安規電容?

    什么情況下用安規電容?

    安規電容是指符合特點安規標準,在電容器失效后,不會導致電擊,不危及人身安危的電容器。根據應用場景和鏈接方式的不同,安規電容分為X電容和Y電容。
    的頭像 發表于 01-21 16:40 ?695次閱讀
    <b class='flag-5'>什么情況下</b>用安規電容?

    獨立看門狗運行時,SR.RUN不顯示1,總是0這是什么情況呢?

    這是什么情況
    發表于 01-21 07:24

    哪些情況下需要用單模光纜

    單模光纜因其獨特的傳輸特性,在需要長距離、高速率、低損耗或抗干擾能力強的通信場景中具有顯著優勢。以下是需要使用單模光纜的典型情況: 1. 長距離通信需求 跨城/跨國骨干網:單模光纜的傳輸距離可達數十
    的頭像 發表于 01-20 10:45 ?194次閱讀

    如何在“SD 卡 NAND 閃存”的情況下使用 Non-OS NVTFAT?

    如何在“SD 卡 NAND 閃存”的情況下使用 Non-OS NVTFAT
    發表于 09-01 07:58

    如何在沒有 NuLink 編程器的情況下執行 SWD 解鎖序列?

    我迫切需要知道如何在沒有 NuLink 編程器的情況下執行 SWD 解鎖序列。
    發表于 08-18 07:04

    請問DTU的設備號都在什么情況下需要填寫,填寫的規則是什么?

    DTU的設備號都在什么情況下需要填寫,填寫的規則是什么?
    發表于 08-07 07:50

    固定式條碼掃描器能在條碼移動情況下掃描嗎?

    在工業生產、物流倉儲等場景中,條碼掃描往往伴隨著物體的動態移動。此時,不少人會產生疑問:固定式條碼掃描器能否在條碼移動的情況下完成掃描?答案是肯定的,但這一過程受到多種技術因素的制約。固定式條碼
    的頭像 發表于 08-04 15:18 ?659次閱讀
    固定式條碼掃描器能在條碼移動<b class='flag-5'>情況下</b>掃描嗎?

    請問CYW20835在sleep mode的情況下,不進入SDS或HIDOF的情況下,底電流最低是多少?

    請問CYW20835在sleep mode的情況下,不進入SDS或HIDOF的情況下,底電流最低是多少?
    發表于 07-07 07:54

    什么情況下用M12線性傳感器?

    在工業自動化和精密測量領域,M12線性傳感器憑借其獨特的性能優勢,成為眾多行業不可或缺的關鍵組件。
    的頭像 發表于 05-14 14:42 ?597次閱讀

    如何在CYPM1322中不使用內部電源的情況下使用VBUS_C_P引腳實現SINK?

    我想在CYPM1322中不使用內部電源的情況下通過VBUS_C_P1輸入電源進行SINK操作,但是由于CC RD功能不起作用,所以無法工作。 當將 5V 作為內部電源施加到 CYPM1322 器件
    發表于 05-08 07:32

    DS1232LPS-2+T&amp;R,在什么情況下,5腳RST會一直輸出高電平?

    DS1232LPS-2+T&R,這款芯片在什么情況下,5腳RST會一直輸出高電平?(正常時序是上電有個400多ms的高電平后,一直處于低電平,如果7腳沒有及時喂狗,會觸發復位,也就是重復400多ms的高電平后,一直處于低電平)
    發表于 04-18 07:51

    LPC1227FBD48如何在沒有SDK的情況下配置FreeRTOS?

    我想在基于 LPC1227FBD48 系列的現有項目中使用 FreeRTOS,但我們沒有可用于控制器的 SDK。我們如何在沒有 SDK 的情況下配置 FreeRTOS。
    發表于 04-02 06:33

    無感直流BLDC,大占空比情況下失步怎么解決?

    無感直流BLDC,大占空比情況下失步問題
    發表于 03-11 08:00