建立handle_mock_01.py文件python
# 1. 導入mock模塊 from unittest import mock class Payment(object): """ 建立支付類 """ pass payment = Payment() # 2. 建立Mock對象, 做爲Payment的實例方法 payment.pay = mock.Mock(return_value="Success") # 3. 當調用pay方法時, 會返回定義Mock對象時指定的return_value值 print(payment.pay())
建立handle_mock_02.py文件web
# 1. 導入mock模塊 from unittest import mock class Payment(object): """ 建立支付類 """ pass def parameter_return_data(param): """定義參數與返回值映射函數 """ param_data = { "用戶ID1": "支付成功", "用戶ID2": "支付異常", "用戶ID3": "支付超時", "用戶ID4": KeyError("參數有誤"), # 能夠返回異常 } return param_data[param] payment = Payment() # 2. 建立Mock對象, 做爲Payment的實例方法 payment.pay = mock.Mock(side_effect=parameter_return_data) # 3. 當調用pay方法時, 會返回指定的值 print(payment.pay("用戶ID1")) # 返回結果: 支付成功 print(payment.pay("用戶ID2")) # 返回結果: 支付異常 print(payment.pay("用戶ID3")) # 返回結果: 支付超時 print(payment.pay("用戶ID4")) # 返回結果: '參數有誤'
建立handle_mock_03.py文件面試
# 1. 導入mock模塊 from unittest import mock class Payment(object): """ 建立支付類 """ pass def fn(a, b): """假設實際pay函數, 有兩個參數""" pass payment = Payment() # 2. 建立Mock對象, 做爲Payment的實例方法 payment.pay = mock.create_autospec(fn, return_value="支付成功") # 3. 當調用pay方法時, 傳參數的個數若是不爲兩個, 則會拋出異常 print(payment.pay("用戶ID1", "卡號")) # 返回結果: 支付成功 print(payment.pay("用戶ID1")) # 返回結果: TypeError: missing a required argument: 'b'
建立handle_mock_04.py文件架構
# 1. 導入mock模塊 from unittest import mock class Payment(object): """ 建立支付類 """ pass def parameter_return_data(param): """定義參數與返回值映射函數 """ param_data = { "用戶ID1": "支付成功", "用戶ID2": "支付異常", "用戶ID3": "支付超時", "用戶ID4": KeyError("參數有誤"), # 能夠返回異常 } return param_data[param] payment = Payment() # 2. 建立Mock對象, 做爲Payment的實例方法 payment.pay = mock.Mock(side_effect=parameter_return_data) # 3. 當調用pay方法時, 會返回指定的值 # 4. 不一樣的斷言方式 # a. assert_called() mock方法至少調用一次 # 若是還未調用, 則返回 AssertionError: Expected 'None' to have been called. # 若是已經調用, 則返回None print(payment.pay("用戶ID1")) # 返回結果: 支付成功 # print(payment.pay.assert_called()) # 返回結果: None # b. assert_called_once() mock方法只調用一次 # 若是調用超過一次則返回 AssertionError: Expected 'None' to have been called. # 不然返回None print(payment.pay.assert_called_once()) # 返回結果: None # c. assert_called_with() 斷言mock方法已經攜帶某個參數調用了 # 若是沒有攜帶某個參數調用, 那麼會斷言失敗 print(payment.pay.assert_called_with("用戶ID1")) # 返回結果: None # d. assert_called_once_with() 斷言mock方法已經攜帶某個參數調用了一次 # 若是沒有攜帶某個參數調用一次的話, 那麼會斷言失敗 print(payment.pay.assert_called_once_with("用戶ID1")) # 返回結果: None # e. assert_any_call() 有攜帶參數(有便可)調用過 # f. assert_not_called() 斷言mock方法從未調用過
若是對python自動化測試、web自動化、接口自動化、移動端自動化、大型互聯網架構技術、面試經驗交流等等感興趣的老鐵們,能夠關注我。我會不按期的發放免費的資料連接,這些資料都是從各個技術網站蒐集、整理出來的,若是你有好的學習資料能夠私聊發我,我會註明出處以後分享給你們。歡迎分享,歡迎評論,歡迎轉發。須要資料的同窗能夠關注個人微頭條獲取資料連接。ide