Patch - Warum funktioniert der relative Patch-Zielname nicht?

Ich habe eine Klasse aus einem Modul importiert, aber wenn ich versuche, den Klassennamen ohne das Modul als Präfix zu patchen, erhalte ich einen Typfehler:

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

Der folgende Code gibt mir beispielsweise den obigen Fehler:

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

Diese zweite Version des Codes gibt mir zwar keinen Tippfehler:

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

Warum das? Warum kann ich Channel an anderen Stellen nur als "Channel" bezeichnen, aber für den Patch muss das Modulpräfix so eingestellt sein, dass kein Fehler auftritt? Außerdem habe ich das Gefühl, dass die Angabe des vollständigen Modulpräfixes ebenfalls nicht funktioniert, da beim Aufrufen von Channel.put.assert_called_with () die Fehlermeldung angezeigt wird, dass assert_called_with kein Attribut von Channel.put ist. Kann jemand erklären, was los ist? Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage