python类属性初始化_Python:如何模拟类属性初始化函数
這里實(shí)際發(fā)生的是當(dāng)你實(shí)際導(dǎo)入模塊時,fn()已經(jīng)執(zhí)行了.因此,在您已經(jīng)評估了存儲在類屬性中的方法之后,模擬就會出現(xiàn).
因此,當(dāng)您嘗試模擬方法時,您嘗試進(jìn)行的測試為時已晚.
如果只是在方法中添加print語句,甚至可以看到這種情況:
def fn():
print("I have run")
return "asdf"
在您的測試模塊中,當(dāng)您導(dǎo)入并且只是在沒有運(yùn)行測試的情況下運(yùn)行時,您將看到我已經(jīng)運(yùn)行將出現(xiàn)在您的控制臺輸出中,而無需從模塊中明確地運(yùn)行任何內(nèi)容.
所以,你可以采取兩種方法.您可以使用PropertyMock將類屬性模擬為您希望存儲的內(nèi)容,如下所示:
@mock.patch('a.C.cls_var',new_callable=PropertyMock)
def test_mock_fn(self,mocked_p):
mocked_p.return_value = '1234'
self.assertEqual('1234',a.C.cls_var)
現(xiàn)在,你必須要知道,通過這樣做,你仍然在運(yùn)行fn,但是通過這種嘲弄,你現(xiàn)在在cls_var中使用你設(shè)置的PropertyMock持有’1234′.
以下建議(可能不太理想,因?yàn)樗枰M(jìn)行設(shè)計(jì)更改)將需要修改您使用類屬性的原因.因?yàn)槿绻鷮?shí)際上將該類屬性設(shè)置為實(shí)例屬性,那么當(dāng)您創(chuàng)建C實(shí)例時,您的方法將執(zhí)行,此時它將使用您的模擬.
所以,你的班級看起來像:
class C:
def __init__(self):
self.var = fn()
你的測試看起來像:
@mock.patch('a.fn',return_value='1234')
def test_mock_fn(self,mocked_p):
self.assertEqual('1234',a.C().var)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python类属性初始化_Python:如何模拟类属性初始化函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你有一笔新订单 语音_坐电梯动口不动手,
- 下一篇: 3DMAX怎么制作逼真的海水运动的动画效