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!