python类属性初始化_Python:如何模拟类属性初始化函数
這里實際發生的是當你實際導入模塊時,fn()已經執行了.因此,在您已經評估了存儲在類屬性中的方法之后,模擬就會出現.
因此,當您嘗試模擬方法時,您嘗試進行的測試為時已晚.
如果只是在方法中添加print語句,甚至可以看到這種情況:
def fn():
print("I have run")
return "asdf"
在您的測試模塊中,當您導入并且只是在沒有運行測試的情況下運行時,您將看到我已經運行將出現在您的控制臺輸出中,而無需從模塊中明確地運行任何內容.
所以,你可以采取兩種方法.您可以使用PropertyMock將類屬性模擬為您希望存儲的內容,如下所示:
@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)
現在,你必須要知道,通過這樣做,你仍然在運行fn,但是通過這種嘲弄,你現在在cls_var中使用你設置的PropertyMock持有’1234′.
以下建議(可能不太理想,因為它需要進行設計更改)將需要修改您使用類屬性的原因.因為如果您實際上將該類屬性設置為實例屬性,那么當您創建C實例時,您的方法將執行,此時它將使用您的模擬.
所以,你的班級看起來像:
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)
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python类属性初始化_Python:如何模拟类属性初始化函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你有一笔新订单 语音_坐电梯动口不动手,
- 下一篇: abaqus pythonreader_