Я импортировал класс из модуля, но когда я пытаюсь исправить имя класса без его модуля в качестве префикса, я получаю ошибку типа:
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.put.assert_called_with(), я получаю сообщение об ошибке, которое assert_called_with не является атрибутом Channel.put. Может кто-нибудь объяснить, что происходит? Большое вам спасибо!