Patch - Dlaczego nie działa względna nazwa docelowej poprawki?

Zaimportowałem klasę z modułu, ale kiedy próbuję załatać nazwę klasy bez jej modułu jako prefiksu, otrzymuję błąd typu:

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

Na przykład następujący kod daje mi powyższy błąd:

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

Podczas gdy ta druga wersja kodu nie daje mi błędu typu:

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

Dlaczego? Dlaczego mogę odwoływać się do kanału jako po prostu „kanału” w innych miejscach, ale dla poprawki potrzebuję prefiksu modułu, aby nie uzyskać błędu? Mam również wrażenie, że podanie pełnego prefiksu modułu nie działa również, ponieważ gdy wywołam Channel.put.assert_called_with (), pojawia się błąd, że assert_called_with nie jest atrybutem Channel.put. Czy ktoś może wyjaśnić, co się dzieje? Dziękuję bardzo!

questionAnswers(1)

yourAnswerToTheQuestion