我有以下代碼:pkg1/mock_class.py:class A: def ma(self): print(' class_A')class B: def __init__(self): self.var = 'vvv' def mb(self): a = A() print('class_B') a.ma()和測(cè)試代碼:from unittest import mockimport pytestfrom pkg1.mock_class import B@pytest.fixture(scope='class')def mockA(): with mock.patch('pkg1.mock_class.A'): yieldclass TestB: def test_b(self, mockA): b = B() b.mb()我想使用fixture模擬整個(gè)A類(),并且我希望能夠在將來使用參數(shù)化配置一些返回值。基本 - 只是像上面實(shí)現(xiàn)的模擬/修補(bǔ)不是工作類 B 被模擬,我不明白為什么。謝謝你的建議。
1 回答

qq_遁去的一_1
TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
上面的代碼工作正常,我認(rèn)為它不起作用,因?yàn)樵趯?shí)際情況下它不是 - 我正在修補(bǔ)不正確的地方。
來自官方文檔(鏈接):
patch() 通過(臨時(shí))將名稱指向的對(duì)象更改為另一個(gè)對(duì)象??梢杂性S多名稱指向任何單個(gè)對(duì)象,因此要使修補(bǔ)工作,您必須確保修補(bǔ)被測(cè)系統(tǒng)使用的名稱。
基本原則是在查找對(duì)象的位置打補(bǔ)丁,該位置不一定與定義的位置相同。幾個(gè)例子將有助于澄清這一點(diǎn)。
添加回答
舉報(bào)
0/150
提交
取消