語法:unittest.mock.patch(target,new = DEFAULT,spec = None,create = False,spec_set = None,autospec = None,new_callable = None,** kwarg );

參數(shù)target 為’package.module.classname’格式的字符串,如果參數(shù)new被省略,那么target 被MagicMock代替;
如果patch()用作裝飾器并且省略new,則創(chuàng)建的mock將作為額外參數(shù)傳遞給裝飾函數(shù),如果patch()用作上下文管理器,則上下文管理器返回創(chuàng)建的mock;
New_Callable參數(shù)允許指定將被調(diào)用以創(chuàng)建新對(duì)象的其他類或可調(diào)用對(duì)象,默認(rèn)情況下,使用magicMock。
修改Test.py文件中的TestData類,在測(cè)試用例前加上一個(gè) @mock .patch()裝飾器
from unittest import mock
from unittest import TestCase
import unittest
import function1
class TestData(TestCase):
# patch裝飾器
@mock.patch('function1.data_parse')
def test_print1(self, mock_data_parse):
mock_data_parse.return_value = {"result": "success", "reason":"null"}
statues = function1.data_show()
print(statues)
self.assertEqual(statues, "data parse success")
@mock.patch('function1.data_parse')
def test_print2(self, data_parse):
data_parse.return_value = {"result": "fail", "reason": "Data Error"}
statues = function1.data_show()
self.assertEqual(statues, "data parse failed")
if __name__ == "__main__":
unittest.main()我們這里模擬的是函數(shù)中的數(shù)據(jù),如果需要mock的數(shù)據(jù)是一個(gè)類中方法的數(shù)據(jù),寫法也是一樣的,比如function1.py模塊中的代碼是:
class DataParse:
def data_parse(self):
pass
class DataShow:
def data_show(self):
ret = DataParse().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文件中的代碼可以這樣寫:
from unittest import mock
from unittest import TestCase
import unittest
from function1 import DataParse, DataShow
class TestData(TestCase):
# patch裝飾器
@mock.patch('function1.DataParse')
def test_print1(self, mock_DataParse):
# 先拿到類的mock實(shí)例
dataParse = mock_DataParse.return_value
# 在通過類的mock實(shí)例調(diào)用方法,對(duì)方法返回值進(jìn)行mock
dataParse.data_parse.return_value = {"result": "success", "reason":"null"}
# 調(diào)用data_show
statues = DataShow().data_show()
print(statues)
self.assertEqual(statues, "data parse success")
@mock.patch('function1.DataParse')
def test_print2(self, mock_DataParse):
# 先拿到類的mock實(shí)例
dataParse = mock_DataParse.return_value
# 在通過類的mock實(shí)例調(diào)用方法,對(duì)方法返回值進(jìn)行mock
dataParse.data_parse.return_value = {"result": "fail", "reason": "Data Error"}
# 調(diào)用data_show
statues = DataShow().data_show()
print(statues)
self.assertEqual(statues, "data parse failed")
if __name__ == "__main__":
unittest.main()
=========輸出=============
data parse success
data parse failed: Data Error
data parse failed首先使用@mock.patch()裝飾器來裝飾你要使用的測(cè)試用例,@mock.patch()中需要帶一個(gè)參數(shù),指定需要mock的函數(shù)或者類,和這個(gè)類所在的包和模塊,例如:@mock.patch(''function1.data_parse''),表示給一個(gè)在function1模塊中的data_parse函數(shù)mock數(shù)據(jù);
然后在測(cè)試用例中接受一個(gè)參數(shù),這個(gè)參數(shù)是mock哪個(gè)函數(shù),就在函數(shù)名前加一個(gè)mock,例如給data_parse函數(shù)mock數(shù)據(jù),這個(gè)參數(shù)名就是mock_data_parse;
有了這個(gè)參數(shù)之后就可以給mock的函數(shù)的return_value賦值了。最后就可以進(jìn)行斷言,運(yùn)行測(cè)試了;
參考: /tupian/20230522/login.html
分享標(biāo)題:封裝mock-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://chinadenli.net/article18/cedjgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化、ChatGPT、Google、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容