日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自带的Mock模块使用

發(fā)布時間:2025/3/20 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自带的Mock模块使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、mock是什么?

  • 英譯中含義有:虛假的; 不誠實的; 模仿的; 模擬的 這個意思
  • 這個庫的主要功能就是模擬一些事務(wù)
  • 官方解釋:Mock是Python中一個用于支持單元測試的庫,它的主要功能是使用mock對象替代掉指定的Python對象,以達到模擬對象的行為

二、為什么要用mock?

舉例:

假設(shè)你開發(fā)一個項目,里面包含了一個登錄模塊,登錄模塊需要調(diào)用身份證驗證模塊中的認證函數(shù),該認證函數(shù)會進行值的返回,然后系統(tǒng)根據(jù)這個返回值來做判斷是否能進行登錄。但是身份證驗證模塊中的認證函數(shù)只有在正式上線的系統(tǒng)上才提供。公司內(nèi)部的測試環(huán)境或者開發(fā)環(huán)境上不提供。

如果此時需要進行登錄模塊的業(yè)務(wù)測試或接口測試,該如何做?

方法一:

搭建一個測試服務(wù)器,在測試的時候,讓認證函數(shù)和這個測試服務(wù)器交互,返回值給登錄模塊;
缺點:
1、測試服務(wù)器可能不好搭建,或者搭建效率很低;
2、搭建的測試服務(wù)器可能無法返回所有可能的值,或者需要大量的工作才能達到這個目的。

方法二:

  • 使用mock函數(shù)模擬即可。

三、mock應(yīng)用

3.1 mock安裝

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

pip install mock

從Python 3.3開始,mock模塊已經(jīng)被合并到標準庫中,被命名為unittest.mock,可以直接import進來使用:

from unittest import mock

備注:目前Python 3.3之后的版本,也可以使用第一種方式應(yīng)用mock

3.2 mock簡單舉例

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' from unittest import mockdef add(num1,num2):return num1 + num2 # passadd_value = mock.Mock(return_value=200) # 創(chuàng)建mock對象 add = add_value # 把mock對象賦值給add方法print( add(10,20) )

從上述代碼執(zhí)行可以看出,假使我把add()方法的實現(xiàn)改為pass,暫時還未實現(xiàn),也可以通過mock先返回所需要的數(shù)據(jù)。

3.3 mock應(yīng)用舉例

import requestsdef send_request(url):r = requests.get(url)return r.status_codedef visit_newdream():return send_request("http://www.hnxmxit.com/")print( visit_newdream() )

上述代碼是訪問我們公司的官網(wǎng),假設(shè)該官網(wǎng)訪問請求還沒被實現(xiàn),此時 visit_newdream() 方法需要 send_request 返回響應(yīng)狀態(tài)碼。這個時候可以用到mock。

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' # 當前文件名為 mock_demo.py import unittest from unittest import mock import requests import mock_demodef send_request(url):r = requests.get(url)return r.status_codedef visit_newdream():return send_request("http://www.hnxmxit.com/")class TestClient(unittest.TestCase):def test_success_request(self):success_send = mock.Mock(return_value='200')mock_demo.send_request = success_sendself.assertEqual(mock_demo.visit_newdream(), '200')if __name__=="__main__":unittest.main()

上述代碼完成了mock的簡單應(yīng)用,由于mock_demo.send_request = success_send 把mock對象賦值給了方法,使得方法再次調(diào)用的時候使用了mock的方法完成把模擬返回值傳遞給mock_demo.visit_newdream()方法。

四、小結(jié)

此文基礎(chǔ)的介紹了mock的入門;

總結(jié)

以上是生活随笔為你收集整理的python自带的Mock模块使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。