我該如何嘲笑這樣的課程ablib.Pin
?我該如何嘲笑關閉Pin的實例的屬性?我想說這應該像這樣工作:如何模擬像`module.Class`這樣的路徑?使用Python的模擬模塊?
mock = MagicMock()
mock.Pin = MagicMock()
mock.Pin.kernel_id = 'N21'
mock.Pin.set_value.return_value = True
mock.Pin.get_value.return_value = 3
modules = {
'ablib': mock,
'ablib.Pin': mock.Pin,
}
patcher = patch.dict('sys.modules', modules)
patcher.start()
當我創建一個PIN比如我和呼叫get_value
或set_value
我得到一個MockInstance代替True
或3
。
>>> p = Pin()
>>> p.set_value(3)
<MagicMock name='mock.Pin().set_value(3)' id='47965968'>
>>> p.kernel_id
<MagicMock name='mock.Pin().kernel_id' id='49231056'>
當我直接打電話kernel_id
上Pin
我得到的結果,我需要。
>>> Pin.kernel_id
'N21'
如何嘲笑ablib.Pin的方式,我得到一個實例ablib.Pin()