Patch - Por que o nome de destino do patch relativo não funciona?

Eu importei uma classe de um módulo, mas quando tento corrigir o nome da classe sem o módulo como um prefixo, recebo um erro de tipo:

TypeError: Need a valid target to patch. You supplied: 'MyClass'

Por exemplo, o código a seguir me fornece o erro acima:

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()

Enquanto esta segunda versão do código não me dá o erro de tipo:

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()

Por que é que? Por que posso referenciar o Canal como apenas "Canal" em outros locais, mas para o patch eu preciso do prefixo do módulo para não receber um erro? Além disso, tenho a sensação de que dar o prefixo de módulo completo não está funcionando porque quando eu chamo Channel.put.assert_called_with () eu recebo o erro que assert_called_with não é um atributo de Channel.put. Alguém pode explicar o que está acontecendo? Muito obrigado!

questionAnswers(1)

yourAnswerToTheQuestion