Патч - Почему не работает относительное имя цели патча?

Я импортировал класс из модуля, но когда я пытаюсь исправить имя класса без его модуля в качестве префикса, я получаю ошибку типа:

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. Может кто-нибудь объяснить, что происходит? Спасибо много!

Ответы на вопрос(1)

Ваш ответ на вопрос