91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

ouxn_HW_Digital ? 來(lái)源:華為開(kāi)發(fā)者社區(qū) ? 作者:華為開(kāi)發(fā)者社區(qū) ? 2021-08-09 14:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

相信每一個(gè)程序猿在寫(xiě)Unit Test的時(shí)候都會(huì)碰到一些令人頭疼的問(wèn)題:如何測(cè)試一個(gè)rest接口;如何測(cè)試一個(gè)包含客戶端調(diào)用服務(wù)端的復(fù)雜方法;如何測(cè)試一個(gè)包含從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的復(fù)雜方法。。。這些問(wèn)題mockito都可以幫我們輕松地解決。

Mockito是啥?

Mockito 是一個(gè)強(qiáng)大的用于 Java 開(kāi)發(fā)的模擬測(cè)試框架, 通過(guò) Mockito 我們可以創(chuàng)建和配置 Mock 對(duì)象, 進(jìn)而簡(jiǎn)化有外部依賴的類的測(cè)試。簡(jiǎn)單來(lái)說(shuō),創(chuàng)建mock對(duì)象之后,這個(gè)對(duì)象里面的方法是怎么實(shí)現(xiàn)的可以不用去關(guān)心,我們只需要給這個(gè)方法定義一個(gè)輸入、輸出即可。

什么情況下使用Mockito:

假設(shè)現(xiàn)在要測(cè)試method A, method A里面又依賴Method B、Method C、Method D,而依賴的這3個(gè)method又不好去構(gòu)建(如ObsClient需要真實(shí)AK SK,HttpClient需要構(gòu)建客戶端與服務(wù)器,Database相對(duì)好構(gòu)建,但是假設(shè)Method C只是從table1、table2聯(lián)合查詢,你還得分別往table1、table2 insert數(shù)據(jù),很繁瑣),這時(shí)候可以考慮Mockito進(jìn)行優(yōu)雅測(cè)試,當(dāng)然如果你想去構(gòu)建真實(shí)的測(cè)試場(chǎng)景,未免有點(diǎn)舍本逐末了。

Mockito的使用:

1、引進(jìn)依賴

Maven依賴如下:

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

代碼中:

import org.mockito.Mockito

2、創(chuàng)建Mock對(duì)象

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

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

}

}

舉個(gè)例子,現(xiàn)在對(duì)VpcClient進(jìn)行mock,從而可以調(diào)用VpcClient里面的getRouteTableList方法。

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

VpcClient.setMockClient(vpcClient)}

3、配置Mock對(duì)象

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

當(dāng)我們有了一個(gè) Mock 對(duì)象后, 我們可以調(diào)用對(duì)象的方法,并且使用

Mockito.doReturn().when().method

,來(lái)設(shè)置當(dāng)調(diào)用method時(shí),在某輸入下返回某輸出。這里的輸入是要與 method真實(shí)的入?yún)⒁恢碌?,輸出也是要與method真實(shí)的返回參數(shù)一致。

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)}

總結(jié):

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

官網(wǎng):

http://mockito.org

API文檔:

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

項(xiàng)目源碼:

https://github.com/mockito/mockito

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3002

    瀏覽量

    116464
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    74012
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    9894

原文標(biāo)題:干貨| 干了這杯Mockito雞尾酒,讓你輕松進(jìn)行單元測(cè)試

文章出處:【微信號(hào):HW-DigitalHome,微信公眾號(hào):華為數(shù)字家庭】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何設(shè)計(jì)好自動(dòng)駕駛ODD?

    為確定自動(dòng)駕駛的可使用范圍,會(huì)給自動(dòng)駕駛設(shè)置一個(gè)運(yùn)行設(shè)計(jì)域(Operational Design Domain,ODD)。ODD的作用就是用來(lái)明確自動(dòng)駕駛在什么情況下能工作,在什么情況下不能工作,給車設(shè)定“工作范圍”。
    的頭像 發(fā)表于 01-24 09:27 ?1548次閱讀

    什么情況下用安規(guī)電容?

    安規(guī)電容指符合特定安規(guī)標(biāo)準(zhǔn),在電容器失效后,不會(huì)導(dǎo)致電擊,不危及人身安危的電容器,根據(jù)應(yīng)用場(chǎng)景和連接方式的不同,安規(guī)電容分為X電容和Y電容。
    的頭像 發(fā)表于 01-21 17:20 ?716次閱讀
    <b class='flag-5'>什么情況下</b>用安規(guī)電容?

    什么情況下用安規(guī)電容?

    安規(guī)電容是指符合特點(diǎn)安規(guī)標(biāo)準(zhǔn),在電容器失效后,不會(huì)導(dǎo)致電擊,不危及人身安危的電容器。根據(jù)應(yīng)用場(chǎng)景和鏈接方式的不同,安規(guī)電容分為X電容和Y電容。
    的頭像 發(fā)表于 01-21 16:40 ?711次閱讀
    <b class='flag-5'>什么情況下</b>用安規(guī)電容?

    獨(dú)立看門狗運(yùn)行時(shí),SR.RUN不顯示1,總是0這是什么情況呢?

    這是什么情況
    發(fā)表于 01-21 07:24

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

    單模光纜因其獨(dú)特的傳輸特性,在需要長(zhǎng)距離、高速率、低損耗或抗干擾能力強(qiáng)的通信場(chǎng)景中具有顯著優(yōu)勢(shì)。以下是需要使用單模光纜的典型情況: 1. 長(zhǎng)距離通信需求 跨城/跨國(guó)骨干網(wǎng):?jiǎn)文9饫|的傳輸距離可達(dá)數(shù)十
    的頭像 發(fā)表于 01-20 10:45 ?205次閱讀

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

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

    如何在沒(méi)有 NuLink 編程器的情況下執(zhí)行 SWD 解鎖序列?

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

    請(qǐng)問(wèn)DTU的設(shè)備號(hào)都在什么情況下需要填寫(xiě),填寫(xiě)的規(guī)則是什么?

    DTU的設(shè)備號(hào)都在什么情況下需要填寫(xiě),填寫(xiě)的規(guī)則是什么?
    發(fā)表于 08-07 07:50

    固定式條碼掃描器能在條碼移動(dòng)情況下掃描嗎?

    在工業(yè)生產(chǎn)、物流倉(cāng)儲(chǔ)等場(chǎng)景中,條碼掃描往往伴隨著物體的動(dòng)態(tài)移動(dòng)。此時(shí),不少人會(huì)產(chǎn)生疑問(wèn):固定式條碼掃描器能否在條碼移動(dòng)的情況下完成掃描?答案是肯定的,但這一過(guò)程受到多種技術(shù)因素的制約。固定式條碼
    的頭像 發(fā)表于 08-04 15:18 ?677次閱讀
    固定式條碼掃描器能在條碼移動(dòng)<b class='flag-5'>情況下</b>掃描嗎?

    請(qǐng)問(wèn)CYW20835在sleep mode的情況下,不進(jìn)入SDS或HIDOF的情況下,底電流最低是多少?

    請(qǐng)問(wèn)CYW20835在sleep mode的情況下,不進(jìn)入SDS或HIDOF的情況下,底電流最低是多少?
    發(fā)表于 07-07 07:54

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

    在工業(yè)自動(dòng)化和精密測(cè)量領(lǐng)域,M12線性傳感器憑借其獨(dú)特的性能優(yōu)勢(shì),成為眾多行業(yè)不可或缺的關(guān)鍵組件。
    的頭像 發(fā)表于 05-14 14:42 ?611次閱讀

    如何在CYPM1322中不使用內(nèi)部電源的情況下使用VBUS_C_P引腳實(shí)現(xiàn)SINK?

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

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

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

    LPC1227FBD48如何在沒(méi)有SDK的情況下配置FreeRTOS?

    我想在基于 LPC1227FBD48 系列的現(xiàn)有項(xiàng)目中使用 FreeRTOS,但我們沒(méi)有可用于控制器的 SDK。我們?nèi)绾卧跊](méi)有 SDK 的情況下配置 FreeRTOS。
    發(fā)表于 04-02 06:33

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

    無(wú)感直流BLDC,大占空比情況下失步問(wèn)題
    發(fā)表于 03-11 08:00