接口測試從零開始系列_mock技術使用

1、什么情況下會使用mock技術

  (1)需要將當前被測單元和其依賴模塊獨立開來,構造一個獨立的測試環境,不關注被測單元的依賴對象,只關注被測單元的功能邏輯

  ----------比如被測代碼中需要依賴第三方接口返回值進行邏輯處理,可能因為網絡或者其他環境因素,調用第三方經常會中斷或者失敗,無法對被測單元進行測試,這個時候就可以使用mock技術來將被測單元和依賴模塊獨立開來,使得測試可以進行下去。

  (2)被測單元依賴的模塊尚未開發完成,而被測單元需要依賴模塊的返回值進行后續處理

  ----------比如service層的代碼中,包含對Dao層的調用,但是,DAO層代碼尚未實現

  (3)被測單元依賴的對象較難模擬或者構造比較復雜

  ----------比如,支付寶支付的異常條件有很多,但是模擬這種異常條件很復雜或者無法模擬,比如,查詢聚劃算的訂單結果,無法在測試環境進行模擬

  2、Mock技術分類

  (1)手動構造mock對象

  ---------------比如,可以自己寫某個接口方法的實現,根據需要編寫返回值,測試代碼中使用該實現類對象

  缺點:會增加代碼量,在寫mock對象代碼時,有可能引入錯誤

  (2)使用開源代碼提供的構造mock方法

  --------------比如easyMock,提供了對接口類的模擬,能夠通過錄制、回放、檢查三步來完成大體的測試過程,可以驗證方法的調用種類、次數、順序,可以令Mock對象返回指定的值或拋出指定異常

  3、EasyMock使用

  (1)引入easyMock

  ------------在maven工程中,通過pom配置依賴關系

<dependency>
??? <groupId>org.easymock</groupId>
??? <artifactId>easymock</artifactId>
??? <version>3.0</version>
??? <scope>test</scope>
</dependency>

  ------------在普通java工程中,通過添加外部包的方式

  (2)使用easyMock過程

  1)使用EasyMock生成Mock對象;
pingJiaDao = mockControl.createMock(IPingJiaDao.class);

  2)設定Mock對象的預期行為和輸出;
EasyMock.expect(pingJiaDao.getGoodPingJiaRate(storeId)).andReturn(0.11);

  3)將Mock對象切換到Replay狀態;
EasyMock.replay(pingJiaDao);

  4)調用Mock對象方法進行單元測試
storeService.setStoredao(pingJiaDao);
double rate = storeService.getStoreGoodRate(storeId);

  5)對Mock對象的行為進行驗證。
EasyMock.verify(pingJiaDao);

  4、其他easyMock功能

  (1)特殊的mock對象:niceMock
(2)參數匹配器
(3)重置mock對象
(4)模擬異常拋出
(5)設置調用次數


本文出自seven的測試人生公眾號最新內容請見作者的GitHub頁:http://qaseven.github.io/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541077.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

amie 規則挖掘_AMIE的完整形式是什么?

amie 規則挖掘AMIE&#xff1a;工程師協會的準會員 (AMIE: Associate Member of the Institution of Engineers) AMIE is an abbreviation of Associate Member of the Institution of Engineers. The Institution of Engineers India Limited (IEIL) provides this profession…

java 馬克思_單鏈表-Java

public class SinglyListNode {int val;SinglyListNode next;SinglyListNode() {}SinglyListNode(int x) {this.val x;}}/*執行用時&#xff1a;12 ms, 在所有 Java 提交中擊敗了66.93%的用戶內存消耗&#xff1a;39.5 MB, 在所有 Java 提交中擊敗了5.06%的用戶*/class MyLink…

python的pass語句_Python | 演示pass語句的示例

python的pass語句python中的pass語句 (pass statement in python) "pass" is a type of null operation or null statement, when it executes nothing happens. It is used when you want do not want to write any code/statement to execute but syntactically a …

HDS:聚焦未來的投資“凍結”

一家日本IT網站報道的有關HDS凍結對高端存儲產品的投資一事引發眾議。讓人陷入疑惑的這次聲明就是&#xff0c;HDS認為單純的陣列產品并非企業存儲的未來。 6月1日&#xff0c;IT Pro Nikkei網站發布了一篇報道&#xff0c;內容援引HDS一份表示將凍結高端存儲業務的簡報。這引發…

java js對象轉字符串數組_JS數組轉字符串(3種方法)【轉】

JavaScript 允許數組與字符串之間相互轉換。其中 Array 方法對象定義了 3 個方法&#xff0c;可以把數組轉換為字符串&#xff0c;如表所示。數組方法說明toString()將數組轉換成一個字符串toLocalString()把數組轉換成本地約定的字符串join()將數組元素連接起來以構建一個字符…

中美共建大數據創新研究中心

由貴陽市人民政府、工信部電子一所、美國加州大學伯克利分校合作共建的貴州伯克利大數據創新研究中心日前在貴陽揭牌。 據了解&#xff0c;貴州伯克利大數據創新研究中心將分兩階段建設。第一階段&#xff0c;2016年9月份至2017年底&#xff0c;將重點完成“學齡兒童大數據分析…

Python中的__init__和self是做什么的?

The __init__ and self are two keywords in python, which performs a vital role in the application. __init__和self是python中的兩個關鍵字&#xff0c;在應用程序中起著至關重要的作用。 To begin with, it is important to understand the concept of class and object…

Palo Alto Networks漏洞防護擴展至云端

中國北京&#xff0c;2016年4月12日 –下一代安全企業Palo Alto Networks?(紐交所代碼&#xff1a;PANW)近日宣布進一步增強其下一代安全平臺&#xff0c;擴展漏洞防護能力&#xff0c;以滿足那些依賴云環境和SaaS應用的業務對安全的需求。 企業機構需要變得更加靈活和有競爭力…

java 嵌套調用_Java嵌套類的使用

嵌套類是指被定義在另一個類內部的類&#xff0c;它為外部類提供服務。嵌套類分四種&#xff1a;靜態成員類、非靜態成員類、匿名類和局部類。一、靜態成員類與非靜態成員類的區別&#xff1f;在什么情況下可以用靜態成員類&#xff1f;我們知道在類的設計中&#xff0c;為了避…

c語言getenv函數_getenv()函數與C ++中的示例

c語言getenv函數C getenv()函數 (C getenv() function) getenv() function is a library function of cstdlib header. It is used to get the environment string. It accepts a parameter which is an environment variable name (platform dependent, it may either case s…

isless()函數與C ++中的示例

C isless()函數 (C isless() function) isless() function is a library function of cmath header, it is used to check whether the given first value is less than the second value. It accepts two values (float, double or long double) and returns 1 if the first …

停牌17個月 漢能薄膜真的要復牌了?

最近&#xff0c;停牌超過一年的漢能薄膜又有新進展。 10月7日&#xff0c;路透社引述知情人士的消息稱&#xff0c;香港證監會或將允許漢能薄膜發電復牌&#xff0c;不過復牌的前提是需漢能將符合一些特定條件。 該消息人士透露&#xff0c;證監會告知漢能&#xff0c;若要恢復…

hive java udf_UDF_Hive教程_田守枝Java技術博客

UDF是User-Defined Functions(用戶定義函數)的簡稱。通過以下命令可以查看HIVE中函數的相關文檔&#xff1a;SHOW FUNCTIONS;DESCRIBE FUNCTION ;DESCRIBE FUNCTION EXTENDED ;1、UDF函數可以直接應用于select語句&#xff0c;對查詢結構做格式化處理后&#xff0c;再輸出內容。…

python 示例_帶有示例的Python列表remove()方法

python 示例列出remove()方法 (List remove() Method) remove() method is used to remove the first occurrence of the given element, the method is called with this list (the list from which we have to remove the element) and accepts the element to be removed as…

車聯網領域,傳統TSP企業做錯了什么 ?

當下&#xff0c;車聯網的定義更加豐富和寬泛&#xff0c;除了傳統意義上的Telematics服務&#xff0c;數字服務、移動出行服務、電商平臺等將被融入到車聯網概念中&#xff0c;與用車相關的維修保養、洗車、代駕等第三方服務&#xff0c;也將成為整車廠整合的重點被納入到車聯…

gettimeofday_PHP gettimeofday()函數與示例

gettimeofdayPHP gettimeofday()函數 (PHP gettimeofday() function) gettimeofday() function is used to get the current time. gettimeofday()函數用于獲取當前時間。 Syntax: 句法&#xff1a; gettimeofday(return_float);Parameter(s): 參數&#xff1a; return_floa…

Shell腳本/bin/bash^M: bad interpreter錯誤解決方法

2019獨角獸企業重金招聘Python工程師標準>>> 在windows下保存了一個腳本文件&#xff0c;用ssh上傳到centos&#xff0c;添加權限執行nginx提示沒有那個文件或目錄。 shell腳本放到/etc/init.d/目錄下&#xff0c;再執行/etc/init.d/nginx&#xff0c;提示多了這句/…

java中map的遍歷方法_Java中Map的三種遍歷方式

集合中的三種遍歷方式&#xff0c;如下代碼&#xff1a;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public class TestMap {public static void main(String[] arg…

uuid hashcode_Java UUID hashCode()方法與示例

uuid hashcodeUUID類hashCode()方法 (UUID Class hashCode() method) hashCode() method is available in java.util package. hashCode()方法在java.util包中可用。 hashCode() method is used to retrieve the hash code for this UUID. hashCode()方法用于檢索此UUID的哈希碼…

java如何遍歷combobox_如何通過COMBOBOX設置Java中的框架標題?

我想創建類似下圖的內容,當用戶從組合框選項中選擇年份、月份和日期時,這些操作將更改標題,并且必須根據所選數據進行更改,這很簡單,我還是新手到目前為止,我已經做到了,問題是它不起作用,我怎么能做到呢?,你能幫我一下嗎?import java.awt.GridLayout;import java.awt.event.…