我已經導入一個類從一個模塊,但是當我嘗試修補的類名沒有它的模塊作爲前綴,我得到一個錯誤類型:補丁 - 爲什麼相對補丁目標名稱不起作用?
TypeError: Need a valid target to patch. You supplied: 'MyClass'
例如,下面的代碼給了我上述錯誤:
import unittest
from mock import Mock, MagicMock, patch
from notification.models import Channel, addChannelWithName, deleteChannelWithName, listAllChannelNames
class TestChannel(unittest.TestCase):
@patch("Channel")
def testAddChannelWithNamePutsChannel(self, *args):
addChannelWithName("channel1")
Channel.put.assert_called_with()
雖然代碼的第二個版本並沒有給我的錯誤類型:
import unittest
from mock import Mock, MagicMock, patch
from notification.models import Channel, addChannelWithName, deleteChannelWithName, listAllChannelNames
class TestChannel(unittest.TestCase):
@patch("notification.models.Channel")
def testAddChannelWithNamePutsChannel(self, *args):
addChannelWithName("channel1")
Channel.put.assert_called_with()
這是爲什麼?爲什麼我可以在其他地方將Channel引用爲「Channel」,但對於我需要模塊前綴的補丁不會出現錯誤?此外,我有一種感覺,讓全模塊前綴不工作,因爲當我調用Channel.put.assert_called_with()我得到的錯誤,assert_called_with不是Channel.put的屬性。有人可以解釋發生了什麼嗎?非常感謝!
非常具有描述性,你涵蓋了兩個問題。非常感謝。 – golmschenk
第三個選項不僅適用於對象的方法,還適用於嘲笑模塊的整個類 - 這正是我所需要的。謝謝! – balu