第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

模擬類函數(shù)應(yīng)該被調(diào)用一次但 call_count == 0?

模擬類函數(shù)應(yīng)該被調(diào)用一次但 call_count == 0?

森林海 2023-10-11 15:56:28
我有以下mod1.py要測試的。_p = Nonedef get_p():    global _p    if _p is None:        _p = P()    return _pdef deco(f):    p = get_p()    def wrapper(*args, **kwargs):        p.func1()        return f(*args, **kwargs)    return wrapper并且P,class P:    def func1(self):        pass我有以下測試代碼。@mock.patch('mod1.get_p')def test_1(mocked):    mocked.get_p = mock.Mock(P)     @mod1.deco()    def test():        pass    test() # will call _p.func1() once    assert mocked.func1.call_count == 1 # func1.count_count is zero然而,它失敗了>       assert p.func1.call_count == 1E       AssertionError: assert 0 == 1為什么call_count是0?
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

為什么代碼不起作用


通常,您會收到 0 次調(diào)用,因?yàn)槟难b飾器不會調(diào)用_p.func1.


您不必編寫,mocked.get_p因?yàn)槟呀?jīng)偽造了它,因此您的mocked參數(shù)代表mod.get_p函數(shù)。


另外,您不應(yīng)該重新定義mocked變量,因?yàn)樗呀?jīng)是mock.Mock


如果mod1你有錯(cuò)誤,你的deco裝飾器是錯(cuò)誤的,我建議你閱讀更多關(guān)于 python 裝飾器的內(nèi)容。


適用于您的案例的工作代碼


mod1.py


class P:

    def func1(self):

        pass



_p = None


def get_p():

    global _p

    if _p is None:

        _p = P()

    return _p


 # other code omitted, it's a decorator which will call _p.func1 once

def deco(func):

    def wrapper(*args, **kwargs):

        p = get_p()

        p.func1()

        return func(*args, **kwargs)

    return wrapper

test_mod1.py


import unittest

from unittest import mock


import mod1


class TestFunc1(unittest.TestCase):

    @mock.patch('mod1.get_p')

    def test_1(self, mocked):

        _p_mock = mock.Mock()

        mocked.return_value = _p_mock


        @mod1.deco

        def test():

            pass


        test()


        _p_mock.func1.assert_called_once()



if __name__ == '__main__':

    unittest.main()

在 openSUSE Tumbleweed、Python3.8.5 上運(yùn)行:


> python test_mod1.py


.

----------------------------------------------------------------------

Ran 1 test in 0.001s


OK


查看完整回答
反對 回復(fù) 2023-10-11
  • 1 回答
  • 0 關(guān)注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號