Python Mock模組原理及使用方法詳解

2022-08-01 11:24:07 字數 2203 閱讀 9090

一、mock是什麼?

英譯中含義有:虛假的; 不誠實的; 模仿的; 模擬的 這個意思

這個庫的主要功能就是模擬一些事務

官方解釋:mock是python中乙個用於支援單元測試的庫,它的主要功能是使用mock物件替代掉指定的python物件,以達到模擬物件的行為

二、為什麼要用mock?

舉例:

假設你開發乙個專案,裡面包含了乙個登入模組,登入模組需要呼叫身份證驗證模組中的認證函式,該認證函式會進行值的返回,然後系統根據這個返回值來做判斷是否能進行登入。但是身份證驗證模組中的認證函式只有在正式上線的系統上才提供。公司內部的測試環境或者開發環境上不提供。

如果此時需要進行登入模組的業務測試或介面測試,該如何做?

方法一:

搭建乙個測試伺服器,在測試的時候,讓認證函式和這個測試伺服器互動,返回值給登入模組;

缺點:1、測試伺服器可能不好搭建,或者搭建效率很低;

2、搭建的測試伺服器可能無法返回所有可能的值,或者需要大量的工作才能達到這個目的。 方法二:

使用mock函式模擬即可。

三、mock應用

3.1 mock安裝

在python 3.3以前的版本中,需要另外安裝mock模組,可以使用pip命令來安裝:

pip install mock

從python 3.3開始,mock模組已經被合併到標準庫中,被命名為unittest.mock,可以直接import進來使用:

from unittest import mock

備註:目前python 3.3之後的版本,也可以使用第一種方式應用mock

3.2 mock簡單舉例

from unittest import mock

def add(num1,num2):

return num1 + num2 # pass

add_value = mock.mock(return_value=200) # 建立mock物件

add = add_value # 把mock物件賦值給add方法

print( add(10,20) )

從上述**執行可以看出,假使我把add()方法的實現改為pass,暫時還未實現,也可以通過mock先返回所需要的資料。

3.3 mock應用舉例

import requests

def send_request(url):

r = requests.get(url)

return r.status_code

def visit_newdream():

return send_request("

")print( visit_newdream() )

上述**是訪問我們公司的官網,假設該官網訪問請求還沒被實現,此時 visit_newdream() 方法需要 send_request 返回響應狀態碼。這個時候可以用到mock。

# 當前檔名為 mock_demo.py

import unittest

from unittest import mock

import requests

import mock_demo

def send_request(url):

r = requests.get(url)

return r.status_code

def visit_newdream():

return send_request("

")class testclient(unittest.testcase):

def test_success_request(self):

success_send = mock.mock(return_value='200')

mock_demo.send_request = success_send

self.assertequal(mock_demo.visit_newdream(), '200')

if __name__=="__main__":

unittest.main()

上述**完成了mock的簡單應用,由於mock_demo.send_request = success_send 把mock物件賦值給了方法,使得方法再次呼叫的時候使用了mock的方法完成把模擬返回值傳遞給mock_demo.visit_newdream()方法。

四、小結

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援。

nginx常用模組原理及如何新增模組

一 常見模組 模組作用 記錄nginx的基本訪問資訊,讓使用者了解nginx的工作狀態資訊。實現nginx的訪問控制,例可以允許或指定的ip位址訪問某些虛擬主機或目錄 實現把每乙個使用者訪問 的日誌資訊記錄到指定的日誌檔案中,供 提供者分析使用者的瀏覽行為 nginx提供https支援 實現web伺...

saltstack通訊原理及編寫模組

第三章 saltstack編寫自己的模組 saltstack的兩個埠 4506埠的作用 salt master ret介面,支援認證 檔案服務 結果手機等功能 4505埠的作用 salt master pub介面,提供遠端執行命令傳送功能 saltstack通訊過程 1 salt minion啟動時...

Python模組zipfile原理及使用方法詳解

zipfile是python裡用來做zip格式編碼的壓縮和解壓縮的,由於是很常見的zip格式,所以這個模組使用頻率也是比較高的 zipfile裡有兩個非常重要的class,分別是zipfile和zipinfo,在絕大多數的情況下,我們只需要使用這兩個class就可以了。zipfile是主要的類,用來...