一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

Mockito是啥?

Mockito 是一個(gè)強(qiáng)大的用于 Java 開發(fā)的模擬測(cè)試框架, 通過 Mockito 我們可以創(chuàng)建和配置 Mock 對(duì)象, 進(jìn)而簡(jiǎn)化有外部依賴的類的測(cè)試。簡(jiǎn)單來說,創(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[…])來創(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

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

    關(guān)注

    20

    文章

    2989

    瀏覽量

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

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70724
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    9666

原文標(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)推薦

    ADS5474模數(shù)轉(zhuǎn)換器的VCM和VREF引腳在什么情況下使用?

    請(qǐng)介紹一ADS5474模數(shù)轉(zhuǎn)換器的VCM和VREF引腳在什么情況下使用? 文檔上說VCM是在直流耦合應(yīng)用時(shí)用于設(shè)置共模電壓,是不是指前級(jí)驅(qū)動(dòng)電路使用放大器的時(shí)候?如果前面直接使用變壓器耦合成差分
    發(fā)表于 01-13 08:04

    ldc1614EVM評(píng)估版背面的沒焊電容時(shí)用來干嘛的?在什么情況下使用?

    請(qǐng)教一個(gè)關(guān)于ldc1614EVM的問題,評(píng)估版背面的沒焊電容時(shí)用來干嘛的?在什么情況下使用?
    發(fā)表于 01-02 08:23

    ADS7254什么情況下SDO_A會(huì)始終呈高電平呢?

    當(dāng)我向ADS7254發(fā)送寫CFR寄存器命令(0X824),再發(fā)送讀CFR寄存器命令(0X300)后,SDO_A始終返回高電平,而SDO_B任然進(jìn)行正常采樣的數(shù)據(jù)返回(0X409)。請(qǐng)問為什么或者什么情況下SDO_A會(huì)始終呈高電平呢?
    發(fā)表于 11-18 07:55

    請(qǐng)問什么情況下會(huì)損壞TLV2548,或者導(dǎo)致INT信號(hào)不再反應(yīng)?

    如題,請(qǐng)問什么情況下會(huì)損壞TLV2548,或者導(dǎo)致INT信號(hào)不再反應(yīng)? 我曾多次驅(qū)動(dòng)過該AD,都可以正常讀取碼值。但有兩次遇到過AD沒有任何反應(yīng),只在上電的瞬間讀取電壓,INT不再拉低(我用的模式
    發(fā)表于 11-14 06:39

    TAS5721有個(gè)Without MCLK的功能,這個(gè)在什么情況下可以沒有MCLK?

    TAS5721有個(gè)Without MCLK的功能,這個(gè)在什么情況下可以沒有MCLK,謝謝!
    發(fā)表于 11-06 08:02

    tas5754的TDM功能在什么情況下使用,有什么優(yōu)點(diǎn)?

    問下,這個(gè)TDM功能在什么情況下使用,有什么優(yōu)點(diǎn),還有同步信號(hào)是否就把LRCLK連接就可以,這個(gè)需要根據(jù)采樣率改寄存器嗎?
    發(fā)表于 10-31 06:03

    運(yùn)放在什么情況下會(huì)出現(xiàn)正反輸入端電壓不等?

    專家老師,運(yùn)放在什么情況下會(huì)出現(xiàn)正反輸入端電壓不等?
    發(fā)表于 09-24 08:06

    貼片電容什么情況下會(huì)出現(xiàn)爆炸?

    貼片電容在多種情況下可能會(huì)出現(xiàn)爆炸,主要原因包括以下幾點(diǎn): 1. 內(nèi)部元件擊穿 制造工藝不良:電容器內(nèi)部元件可能因制造工藝問題而存在缺陷,導(dǎo)致在使用過程中發(fā)生擊穿,從而引發(fā)爆炸。 2. 外殼絕緣損壞
    的頭像 發(fā)表于 09-23 14:48 ?815次閱讀
    貼片電容<b class='flag-5'>什么情況下</b>會(huì)出現(xiàn)爆炸?

    運(yùn)放使用時(shí),虛短,虛斷在什么情況下使用呢?

    運(yùn)放使用時(shí),虛短,虛斷在什么情況下使用呢?是在單端,差分輸入條件都能使用么?
    發(fā)表于 09-14 08:53

    什么情況下OPA541容易損壞?

    后用示波器TEK1012觀察限流保護(hù)電阻兩端的電壓,結(jié)果再次損壞OPA541。 我想請(qǐng)問什么情況下OPA541容易損壞,另外我使用的限流保護(hù)電阻和負(fù)載均為水泥電阻,不知是否因存在感性成分造成。附電路圖如下:
    發(fā)表于 09-11 07:49

    INA226的Alert引腳什么情況下會(huì)異常?

    INA226的Alert引腳什么情況下異常
    發(fā)表于 08-28 08:01

    plc什么情況下會(huì)導(dǎo)致程序丟失

    PLC(Programmable Logic Controller,可編程邏輯控制器)是一種廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域的設(shè)備。它通過執(zhí)行用戶編寫的程序來實(shí)現(xiàn)對(duì)機(jī)械設(shè)備的控制。然而,在某些情況下,PLC
    的頭像 發(fā)表于 08-19 09:14 ?2885次閱讀

    什么情況下不能用節(jié)點(diǎn)電壓法

    節(jié)點(diǎn)電壓法是一種常用的電路分析方法,它通過求解電路中各個(gè)節(jié)點(diǎn)的電壓來分析電路的工作狀態(tài)。然而,在某些情況下,節(jié)點(diǎn)電壓法可能不適用或不準(zhǔn)確。以下是一些可能不適用節(jié)點(diǎn)電壓法的情況: 非線性元件 :節(jié)點(diǎn)
    的頭像 發(fā)表于 08-06 17:10 ?1864次閱讀

    DTU的設(shè)備號(hào)都在什么情況下需要填寫呢?填寫的規(guī)則是什么?

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

    wifi_station_disconnect()在什么情況下會(huì)返回false?

    正常休眠,如果是在Station模式,則調(diào)用無法返回而且整個(gè)程序運(yùn)行異常(但不會(huì)自動(dòng)復(fù)位),無法正常休眠! 這個(gè)是SDK異常還是我使用方法或者代碼有問題? 另:wifi_station_disconnect()在什么情況下會(huì)返回false? SDK使用RTOS1.
    發(fā)表于 07-19 10:17