mock介紹

1.mock概念

mock又叫模擬,是Python中一個用於測試的庫,它的主要功能是使用mock對象替代掉指定的Python對象,以達到模擬對象的行爲; 從Python 3.3開始,mock模塊已經被合併到標準庫中,被命名爲unittest.mock,能夠直接import進來使用。Mock對象就是mock模塊中的一個類的實例,這個類的實例能夠用來替換其餘的Python對象,來達到模擬的效果;html

2.Mock和MagicMock

  • Mock是一個靈活的模擬對象,用於替換整個代碼中存根和測試雙精度的使用,模擬是可調用的,並在訪問它們時建立屬性做爲新模擬;函數

  • MagicMock是一個Mock預先建立並準備使用的全部魔術方法的子類。MagicMock是懶加載的,在沒調用magic方法的時候,是不存在這個方法的;測試

3.mock 使用

場景:當開發一個項目的時候,一個同事開發了數據清洗功能,另一個同事須要拿到清洗後的數據,完成數據展現。那麼這個時候,數據清洗和數據展現這兩個功能就存在依賴性,必須是數據清洗完畢以後才能進行數據展現;code

首先咱們須要建立一個function1.py的模塊,而後在這個模塊中定義一個數據清洗方法和一個數據展現方法orm

# 數據清洗功能沒有開發完畢
def data_parse():
    pass
# 數據展現功能
def data_show():
    # ret爲待mock的數據
    # return是字典模型
    ret = data_parse()
    try:
        if ret.get('result') == "success":
            return "data parse success"
        elif ret.get('result') == "fail":
            print("data parse failed: {}".format(ret.get('reason')))
            return "data parse failed"
        else:
            return "Unknow Reason"
    except:
        return "Server Unknow Reason"

建立一個Test.py模塊,在這模塊裏面建立一個TestData類,繼承TestCase類,在這個類中模擬data_parse()函數的返回結果htm

from unittest import mock
from unittest import TestCase
import unittest
import function1

class TestData(TestCase):
    def test_print1(self):
        function1.data_parse = mock.MagicMock(return_value={"result": "success", "reason":"null"})
        statues = function1.data_show()
        print(statues)
        self.assertEqual(statues, "data parse success")

    def test_print2(self):
        function1.data_parse = mock.MagicMock(return_value={"result": "fail", "reason": "Data Error"})
        statues = function1.data_show()
        self.assertEqual(statues, "data parse failed")

if __name__ == "__main__":
    unittest.main()
  • 先找到要替換的對象;對象

  • 實例化mock類獲得一個mock對象,而且設置這個對象的行爲;繼承

  • 使用這個mock對象替換掉咱們想替換的對象;開發

  • 編寫測試代碼,進行斷言;get

參考:https://www.9xkd.com/user/plan-view.html?id=2814187020

相關文章
相關標籤/搜索