Parche - ¿Por qué no funciona el nombre de destino del parche relativo?

He importado una clase de un módulo, pero cuando intento parchear el nombre de la clase sin su módulo como prefijo, aparece un error de tipo:

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

Por ejemplo, el siguiente código me da el error anterior:

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

Mientras que esta segunda versión del código no me da el error 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()

¿Porqué es eso? ¿Por qué puedo hacer referencia al canal como "canal" en otros lugares, pero para el parche necesito el prefijo del módulo para no recibir un error? Además, tengo la sensación de que dar el prefijo del módulo completo tampoco funciona porque cuando llamo a Channel.put.assert_called_with () me sale el error de que assert_called_with no es un atributo de Channel.put. ¿Alguien puede explicar lo que está pasando? Muchas gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta