Patch - Pourquoi ne pas la relative patch nom de la cible de travail?

J'ai importé une classe à partir d'un module, mais quand j'essaie de corriger le nom de la classe sans le module comme un préfixe j'obtiens une erreur de type:

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

Par exemple, le code suivant me donne l'erreur ci-dessus:

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

Alors que cette seconde version du code ne me donne pas l'erreur de type:

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

Pourquoi est-ce? Pourquoi ne puis-je Canal de référence que comme "Canal" dans d'autres endroits, mais pour le patch, j'ai besoin du module préfixe de ne pas obtenir une erreur? Aussi, j'ai le sentiment que le fait de donner la pleine module préfixe n'est pas de travail, soit parce que quand j'ai Canal d'appel.mettre.assert_called_with() j'obtiens le message d'erreur que assert_called_with n'est pas un attribut de la manche.mettre. Quelqu'un peut m'expliquer ce qu'il se passe? Merci beaucoup!

InformationsquelleAutor golmschenk | 2013-04-17