成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python中Mock和MagicMock的區(qū)別

TigerChain / 3452人閱讀

摘要:也就是說(shuō),如果不需要,兩者使用起來(lái)并沒(méi)有什么分別。來(lái)看個(gè)例子,先定義個(gè)類,里面只有一個(gè)成員方法,返回倍的數(shù)值使用類來(lái)掉這個(gè)成員方法使用類來(lái)兩者沒(méi)有任何區(qū)別,都成功了了成員方法。再看下兩者的區(qū)別因?yàn)槭褂妙悤r(shí),默認(rèn)不會(huì)創(chuàng)建這個(gè)的,所以報(bào)錯(cuò)。

Python的unittest.mock模塊中提供了兩個(gè)主要的mock類,分別是MockMagicMock.

先看一下官方文檔的定義:

MagicMock is a subclass of Mock with all the magic methods pre-created and ready to use.

其實(shí)已經(jīng)很清楚了,MagicMock是Mock的子類,并且預(yù)先創(chuàng)建了全部magic method的mock。
也就是說(shuō),如果不需要mock magic method,兩者使用起來(lái)并沒(méi)有什么分別。

來(lái)看個(gè)例子,先定義個(gè)類,里面只有一個(gè)成員方法,返回10倍的數(shù)值:

class Person:
    def get_10_times_value(self, value)
        return 10 * value

使用Mock類來(lái)mock掉這個(gè)成員方法:

def test_should_mock_get_10_times_value_with_Mock(self):
    p = Person()
    p.get_10_times_value = Mock(return_value=100)
    
    self.assertEqual(p.get_10_times_value(), 100)

使用MagicMock類來(lái)mock:

def test_should_mock_get_10_times_value_with_MagicMock(self):
    p = Person()
    p.get_10_times_value = MagicMock(return_value=100)
    
    self.assertEqual(p.get_10_times_value(), 100)

兩者沒(méi)有任何區(qū)別,都成功了mock了成員方法。

再看下兩者的區(qū)別:

def test_should_raise_exception(self):
    m = Mock()
    list(m)

TypeError: "Mock" object is not iterable

因?yàn)槭褂肕ock類時(shí),默認(rèn)不會(huì)創(chuàng)建__iter__這個(gè)magic method的mock,所以報(bào)錯(cuò)。

如果想mock __iter__這個(gè)方法,得自己去做,如下:

def test_should_mock_magic_method_with_Mock(self):
    m = Mock()
    m.__iter__ = Mock(return_value=iter([]))
    
    self.assertEqual(list(m), [])

而使用MagicMock類時(shí)默認(rèn)就會(huì)mock掉所有的magic method,所以不需要自己mock,__iter__默認(rèn)是空數(shù)組:

def test_should_mock_magic_method_with_MagicMock(self):
    m = MagicMock()
    
    self.assertEqual(list(m), [])

因?yàn)橐呀?jīng)默認(rèn)創(chuàng)建了magic method的mock,所以可以直接使用return_value屬性來(lái)改變值:

def test_should_mock_magic_method_with_MagicMock(self):
    m = MagicMock()
    m.__iter__.return_value = [1, 2, 3]
    
    self.assertEqual(list(m), [1, 2, 3])

其他magic method類似。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45539.html

相關(guān)文章

  • tornado異步mock以及裝飾器

    摘要:非常適合寫(xiě)單元測(cè)試用它掉網(wǎng)絡(luò)請(qǐng)求的返回值即可測(cè)試用的給上面的加裝飾器放在上面這種一般的使用場(chǎng)景就是加緩存或者計(jì)時(shí)之類因?yàn)楫惒降睦锩媸莻€(gè)所以最里面包的一層還是要加并且用返回 mock非常適合寫(xiě)單元測(cè)試, 用它patch掉網(wǎng)絡(luò)請(qǐng)求的返回值即可 async_func.py #!/usr/bin/env python # -*- coding:utf-8 -*- import signal i...

    Chaz 評(píng)論0 收藏0
  • Python 模擬測(cè)試介紹

    摘要:接下來(lái)我們將介紹如何對(duì)對(duì)象的方法進(jìn)行模擬測(cè)試。選項(xiàng)創(chuàng)建模擬測(cè)試接口我們可以在的構(gòu)造函數(shù)中提供一個(gè)模擬測(cè)試實(shí)例,而不是模擬創(chuàng)建具體的模擬測(cè)試方法。 如何不靠耐心測(cè)試 通常,我們編寫(xiě)的軟件會(huì)直接與那些我們稱之為骯臟的服務(wù)交互。通俗地說(shuō),服務(wù)對(duì)我們的應(yīng)用來(lái)說(shuō)是至關(guān)重要的,它們之間的交互是我們?cè)O(shè)計(jì)好的,但這會(huì)帶來(lái)我們不希望的副作用——就是那些在我們自己測(cè)試的時(shí)候不希望的功能。 比如,可能我們...

    BearyChat 評(píng)論0 收藏0
  • 代碼測(cè)試用例指南

    摘要:測(cè)試的通用規(guī)則測(cè)試單元應(yīng)該集中于小部分的功能,并且證明它是對(duì)的。通過(guò)去除依賴盡量使測(cè)試單元快速運(yùn)行。實(shí)現(xiàn)來(lái)持續(xù)集成通過(guò)代碼提交的本地或者來(lái)持續(xù)集成測(cè)試你的代碼。 原文鏈接:http://blog.speedx.com/backend-test-guide 將測(cè)試代碼和運(yùn)行代碼一起寫(xiě)是一種非常好的習(xí)慣。聰明地使用這種方法將會(huì)幫助你更加精確地定義代碼的含義,并且代碼的耦合性更低。 測(cè)試的通...

    chinafgj 評(píng)論0 收藏0
  • Python Mock入門(mén)

    摘要:準(zhǔn)確的說(shuō),是中一個(gè)用于支持單元測(cè)試的庫(kù),它的主要功能是使用對(duì)象替代掉指定的對(duì)象,以達(dá)到模擬對(duì)象的行為。下面我們使用對(duì)象在單元測(cè)試中分別測(cè)試訪問(wèn)正常和訪問(wèn)不正常的情況。 Mock是什么 Mock這個(gè)詞在英語(yǔ)中有模擬的這個(gè)意思,因此我們可以猜測(cè)出這個(gè)庫(kù)的主要功能是模擬一些東西。準(zhǔn)確的說(shuō),Mock是Python中一個(gè)用于支持單元測(cè)試的庫(kù),它的主要功能是使用mock對(duì)象替代掉指定的Python...

    Winer 評(píng)論0 收藏0
  • PythonMock示例

    摘要:一些常用的示例先簡(jiǎn)單定義個(gè)類,方便舉例這個(gè)類里有兩個(gè)成員方法,一個(gè)有參數(shù),一個(gè)無(wú)參數(shù)。有個(gè)模塊方法,返回?cái)?shù)據(jù)庫(kù)中所有指定的人員,并按排序掉整個(gè)數(shù)據(jù)庫(kù)訪問(wèn)先得到一個(gè)的對(duì)象,再在中設(shè)置一個(gè)對(duì)象,此時(shí)不需要自己再創(chuàng)建 一些常用的mock示例 先簡(jiǎn)單定義個(gè)類,方便舉例: class Person: def __init__(self): self.__age = 10 ...

    elva 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<