欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

封裝mock

1.patch裝飾器的概念

  • patch裝飾器是mock第二種實(shí)現(xiàn)數(shù)據(jù)模擬的方式,patch()充當(dāng)函數(shù)裝飾器,類(lèi)裝飾器或上下文管理器,可用于處理測(cè)試范圍內(nèi)的修補(bǔ)模塊和類(lèi)級(jí)屬性;

2.patch裝飾器語(yǔ)法

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

    成都創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供江源企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為江源眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

  • 參數(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ì)象的其他類(lèi)或可調(diào)用對(duì)象,默認(rèn)情況下,使用magicMock。

3.patch裝飾器實(shí)現(xiàn)數(shù)據(jù)模擬

修改Test.py文件中的TestData類(lèi),在測(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è)類(lèi)中方法的數(shù)據(jù),寫(xiě)法也是一樣的,比如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文件中的代碼可以這樣寫(xiě):

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):
        # 先拿到類(lèi)的mock實(shí)例
        dataParse = mock_DataParse.return_value
        # 在通過(guò)類(lèi)的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):
        # 先拿到類(lèi)的mock實(shí)例
        dataParse = mock_DataParse.return_value
        # 在通過(guò)類(lèi)的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()裝飾器來(lái)裝飾你要使用的測(cè)試用例,@mock.patch()中需要帶一個(gè)參數(shù),指定需要mock的函數(shù)或者類(lèi),和這個(gè)類(lèi)所在的包和模塊,例如:@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è)試了;

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

名稱(chēng)欄目:封裝mock
文章出自:http://chinadenli.net/article28/jogdcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站制作、企業(yè)建站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
久久天堂夜夜一本婷婷| 日韩欧美综合中文字幕| 在线视频三区日本精品| 加勒比日本欧美在线观看| 中文字幕91在线观看| 成人精品视频一区二区在线观看| 免费特黄一级一区二区三区| 精品少妇一区二区三区四区| 91福利免费一区二区三区| 欧美日韩国产亚洲三级理论片 | 好吊妞视频这里有精品| 国产在线成人免费高清观看av | 高清不卡一卡二卡区在线| 国产超碰在线观看免费| 国产成人精品视频一二区| 亚洲性生活一区二区三区| 国产乱久久亚洲国产精品| 国产日韩在线一二三区| 国产精品第一香蕉视频| 国产精品超碰在线观看| 精品人妻一区二区三区免费| 五月婷婷综合激情啪啪| 日韩欧美好看的剧情片免费| 老司机精品视频在线免费看 | 欧美日韩国产免费看黄片| 国产精品熟女在线视频| 深夜少妇一区二区三区| 日韩精品一级一区二区| 很黄很污在线免费观看| 精品国产亚洲一区二区三区 | 超碰在线播放国产精品| 亚洲综合香蕉在线视频| 高清一区二区三区大伊香蕉 | 国产精品内射视频免费| 日韩精品一区二区毛片| 午夜精品在线观看视频午夜| 亚洲做性视频在线播放| 国产精品欧美一区两区| 国产精品免费视频久久| 国产av精品一区二区| 久久精品a毛片看国产成人|