有一個包,看起來像這樣:我如何修補屬性對象的方法在python
lcl
|
| - lcl
| - LCL.py
| - lunabuild.py
在lunabuild模塊,有一個Lunabuild類。 Lunabuild類有一個方法Lunabuild.configure_jobs()。 的LCL類進口lunabuild:
from lcl import lunabuild
然後,它使用它作爲一個實例懶洋洋屬性:
@property
def luna_build(self):
self._luna_build = lunabuild.Lunabuild()
的LCL類有一個main()方法在運行Lunabuild.configure_jobs()方法:
main(self)
try:
self.luna_build.configure_jobs()
except ValidationError:
...
except Exception, e:
return_code = 2
self.logger_exception(e)
我試圖修補configure_jobs到有引發錯誤side_effect,這樣我可以測試是否如預期般記錄未知的錯誤。
我一直無法弄清where to patch。它一直告訴我它不識別該屬性,或者lunabuild沒有configure_jobs屬性。
我試過一堆不同的選項。上附加一個調試運行,我可以看到test_lcl在下面的代碼是一個lcl.lunabuild.Lunabuild對象
UPDATE: 我的最新嘗試是
with patch.object('lcl.lunabuild.Lunabuild', 'configure_jobs') as mock:
mock.side_effect = OSError(2, 'message')
retcode = test_lcl.main()
self.assertEquals(retcode, 2)
向我們展示如何修補它以及如何導入屬性 - 後者對於確定修補位置非常重要。 – Makoto
向主要添加了信息。 – qkslvrwolf
感謝你的這一點,這增加了一點難題。最後一點:你說'Lunabuild'住在那個文件結構中。你在哪裏援引它?它在同一個模塊中嗎? – Makoto