1. 程式人生 > >軟體測試中Mock和Stub

軟體測試中Mock和Stub

1.StubMock

1)相同點

StubMock物件都是用來模擬外部依賴,使我們能控制。如果被測程式、系統或物件,我們稱之為A。在測試A的過程中,A需要與程式、系統或物件B進行互動,那麼Stub/Mock就是用來模擬B的行為來與A進行互動。

2)不同點

Stub,也即“樁”,很早就有這個說法了,主要出現在整合測試的過程中,從上往下的整合時,作為下方程式的替代。作用如其名,就是在需要時,能夠發現它存在,即可。就好像點名,“到”即可。

Mock,主要是指某個程式的傀儡,也即一個虛假的程式,可以按照測試者的意願做出響應,返回被測物件需要得到的資訊。也即是要風得風、要雨得雨、要返回什麼值就返回什麼值。

總體來說,stub完全是模擬一個外部依賴,用來提供測試時所需要的測試資料。而mock物件用來判斷測試是否能通過,也就是用來驗證測試中依賴物件間的互動能否達到預期。

  下面用兩個圖來說明使用Mock和Stub在實際測試中的關注點的不同:


左圖中,看到stub作為外部依賴的模擬,只需要模擬返回資料就ok了,我們的測試重點在於自身的邏輯。而右圖中,通過Mock,模擬外部依賴的各種的返回值,來驗證與外部依賴的互動。

2.python中mock模組使用舉例

(1)未使用python mock模組的單元測試

# test.py
def add_and_multiply(x, y):
    addition = x + y
    multiple = multiply(x, y)
    return (addition, multiple)

def multiply(x, y):
    return x * y

import unittest

class MyTestCase(unittest.TestCase):

    def test_add_and_multiply(self):
        x = 3
        y = 5

        addition, multiple = add_and_multiply(x, y)

        self.assertEqual(8, addition)
        self.assertEqual(15, multiple)

if __name__ == "__main__":
    unittest.main()

(2)使用python mock模組的單元測試

# test.py  
import mock  
import unittest  
  
def add_and_multiply(x, y):  
    addition = x + y  
    multiple = multiply(x, y)  
    return (addition, multiple)  
  
def multiply(x, y):  
    return x * y  
	
class MyTestCase(unittest.TestCase):  
 
    @mock.patch('multiply')  
    def test_add_and_multiply(mock_multiply):  
        x = 3  
        y = 5  
  
        mock_multiply.return_value = 15  
        addition, multiple = add_and_multiply(x, y)  
		
        mock_multiply.assert_called_once_with(3, 5)  
        self.assertEqual(8, addition)  
        self.assertEqual(15, multiple)  
  
if __name__ == "__main__":  
    unittest.main()

使用“mock.patch”裝飾器來用mock物件替換"multiply'。然後將它作為一個引數"mock_multiply"插入到測試程式碼中。在這個測試的上下文中,任何對“multiply”的呼叫都會被重定向到“mock_multiply”物件。

備註:

在Python2.x 中 mock是一個單獨模組,需要單獨安裝。在Python3.x中,mock已經被整合到了unittest單元測試框架中,所以,可以直接使用。

學習資料參考於:

http://www.csdn.net/article/2015-06-01/2824821

http://www.cnblogs.com/TankXiao/archive/2012/03/06/2366073.html

相關推薦

軟體測試MockStub

1.Stub與Mock (1)相同點 Stub和Mock物件都是用來模擬外部依賴,使我們能控制。如果被測程式、系統或物件,我們稱之為A。在測試A的過程中,A需要與程式、系統或物件B進行互動,那麼Stu

軟體測試所需的一些mysql操作技巧

一:基礎操作。 1、說明:建立資料庫 CREATE DATABASE database-name 2、說明:刪除資料庫 drop database dbname 3、說明:備份sql server — 建立 備份資料的 device USE master EXEC sp_addumpdevi

軟體測試我們一般會遇到三角形年月日的問題

我們遇到三角形和年月日的面試時,一般會讓我們手機程式碼,下面是自我總結的一些小程式碼 測試用例的設計: 非三角行: 輸入 a = 2, b = 3 c = 6 , 輸出非三角行 等邊三角行: 輸入 a = 2 b = 2 c = 2 , 輸出等邊三角行 等腰三

性能測試TPS並發用戶數

lr並發用戶數:是指現實系統中操作業務的用戶,在性能測試工具中,一般稱為虛擬用戶數(Virutal User)。並發用戶數和註冊用戶數、在線用戶數的概念不同,1、並發用戶數一定會對服務器產生壓力的,2、而在線用戶數只是 ”掛” 在系統上,對服務器不產生壓力,3、註冊用戶數一般指的是數據庫中存在的用戶數。TPS

軟體測試使用coverage統計python程式碼的覆蓋率

軟體測試中使用coverage統計python程式碼的覆蓋率 1.確保電腦裡面安裝了python環境,安裝了pip。 2.使用管理員身份開啟cmd,鍵入pip install coverage,等待安裝完成。 3.在命令提示符裡面使用coverage執行python程式碼。 備註:執

軟體測試樁模組與驅動模組的概念與區別(轉載),打樁

樁模組和驅動模組(以C語言為例):   很多人對樁模組和驅動模組的概念會搞不清楚,那麼下面來介紹這兩個概念:   模組結構例項圖:   假設現在專案組把任務分給了7個人,每個人負責實現一個模組。你負責的是B模組,你很優秀,第一個完成了編碼工作,現在需要開展單元測試工作,先分析結構圖:   1、由於

軟體測試UT,IT,ST,UAT分別是什麼意思

UT是單元測試,Unit Test 單元測試任務包括: 1 模組介面測試; 2 模組區域性資料結構測試; 3 模組邊界條件測試; 4 模組中所有獨立執行通路測試; 5 模組的各條錯誤處理通路測試。; IT是整合測試,Integration Test 整合測試

軟體測試測試用例常用的設計方法分析

一、場景法      官方:通過運用場景法對系統的功能點或業務流程描述,從而提高測試效果。場景法一般包含基本流和備選流,從一個流程開始,通過描述經過的路徑來確定的過程,經過遍歷所有的基本流和備用流來完成整個場景。     個人總結:設計

UML軟體測試 計劃 設計執行: 解空間測試常見錯誤及糾正方法

軟體測試 計劃 設計和執行 ◾計劃和組織軟體專案中的測試 ◾欣賞不同的測試方法 ◾建立與包相對應的測試設計 ◾為類測試建立測試工具 ◾為用例測試建立功能測試用例 ◾使用等價分割槽和邊界值建立樣本測試資料 ◾記錄執行測試用例和整理結果的步驟 ◾規劃執行測試(例如

最全軟體測試面試問題回答,全文背熟不拿下offer算我輸!

求職,類似於打仗,是一場挑戰自己的戰鬥,也是一場跟用人單位的博弈,更是一場千人過獨木橋的廝殺、混戰。《孫子·謀攻篇》中早就說了:"知己知彼,百戰不殆;不知彼而知己,一勝一負;不知彼,不知己,每戰必殆。"。 在當今競爭激烈的軟體測試職場中,同學們想謀一份令他人羨慕、讓

App測試AndroidIOS測試區別

App測試中ios和Android有哪些區別呢?1 . Android長按home鍵撥出應用列表和切換應用,然後右滑則終止應用;2. 多解析度測試,Android端20多種,ios較少;3. 手機作業系統,Android較多,ios較少且不能降級,只能單向升級;新的ios系統中的資源庫不能完全相容低版本中

關於軟體測試的理解反思

上一篇裡我們討論了測試的必需性,如果大家目前還在公司裡做著測試的工作,那就說明還是落在必需的範圍裡面,或者至少一段時間是吧。那接下來我們看下既然需要做測試,需要做哪些事情。基於我自己的一些理解和觀察,我試圖把測試工作的層次分成三個階段,越到後面涵蓋的範圍越廣。這裡討論的一些做法可能更偏向於網際網路方面的測

軟體測試階段劃分“黑白灰”盒測試的分類

一、軟體測試的分類1.按照開發階段劃分單元測試、整合測試、系統測試、驗證測試2.按照測試技術劃分靜態測試、動態測試、白盒測試、黑盒測試、灰盒測試3.按照測試執行者劃分開發方測試、使用者方測試、第三方測試4.按照測試內容劃分功能測試、效能測試、負載測試、壓力測試、併發測試、容量

軟體測試的目的原則

 基於不同的立場,存在著兩種完全不同的測試目的。從使用者的角度出發,普遍希望通過軟體測試暴露軟體中隱藏的錯誤和缺陷,以考慮是否可以接受該產品。而從軟體開發者的角度出發,則希望測試成為表明軟體產品中不存在錯誤的過程,驗證該軟體已正確地實現了使用者的要求,確立人們對軟體質量的信

【測評】軟體測試廠商ParasoftSmartBear關鍵功能對比

Parasoft是一家專門提供軟體測試解決方案的公司,幫助企業打造無缺陷的軟體。解決方案几乎涵蓋了軟體開發週期從開始到結束所有的階段,包括:持續測試解決方案、開發測試解決方案、應用安全解決方案和嵌入式開發測試解決方案。 SmartBear公司致力於開發測試和效能工具十幾年,已經發展成為一個在

軟體測試就自動化測試是否終將能替代手動測試的討論。

    在文章開始之前我想說本篇文章只代表個人言論。     就軟體測試中就自動化測試是否終將能替代手動測試的問題,我想先介紹一下手動測試和自動化測試。 1. 手工測試的概念     所謂的手工測試就是測試人員按照事先為覆蓋被測軟體需求編寫的測試用例,根據測試大綱中所描述

軟體測試常用的SQL語句(初級篇)

  軟體測試人員對資料庫需要熟悉的常用操作語句就是增刪改查。 新增記錄語句 語法格式: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]     [INTO] tbl_name [(col_name,...)

軟體測試--基本流備選流用例

測試用例首先來自於對於需求的分析,是否能為測試挑選最合適或最關鍵的需求,關係到專案的成敗。 思考方法1:正反面思考法 為每個測試需求至少編制兩個測試用例:正面測試用例& 負面測試用例 正面測試用例:用於證明該需求已經滿足; 負面測試用例:反映某個無法接受、反常或意外的

JUnit測試setup()teardown()方法

       這幾天做Junit測試接觸到了setup和teardown兩個方法,簡單的可以這樣理解它們,setup主要實現測試前的初始化工作,而teardown則主要實現測試完成後的垃圾回收等工作。

android自動化測試hierarchyvieweruiautomatorviewer獲取控制元件資訊的方式比對

android自動化新人一個,目前研究PC端獲取android裝置的控制元件資訊有哪些方式。多多指教!         android的目錄tools下有2個自帶的工具hierarchyviewer和uiautomatorviewer,開啟後,如下所示: