Ich Schreibeinheit Tests und zum Testen möchte ich eine Methode des bereits vorhandenen Objekts zu verspotten. Sieht aber mit asyncio corutines aus, es ist nicht so einfach wie es aussieht. Ich habe versucht, MagickMock zu verwenden, aber es funktioniert einfach nicht. Es gibt keine Fehler oder Ausnahmen, aber mit Debugger kann ich sehen, dass f() nie aufgerufen wird.Mock eine Methode von bereits instanziierten Objekt
Meine Tests und Objekt, das ich so patchen sehen will:
from unittest.mock import patch, MagicMock
class Service(object):
async def callback_handler(self, msg):
pass
async def handle(self, msg):
await self.callback_handler(msg)
class TestCase(object):
def setUp(self):
self.service = Service()
@patch('module.msg')
def test_my_case(self, msg_mock):
f_was_called = False
async def f():
global f_was_called
f_was_called = True
self.service.callback_handler = MagicMock(wraps=f) # here I try to mock
await self.service.handle(msg_mock)
assert f_was_called is True
Wie ich bereits instanziiert Objektmethode mit einigen benutzerdefinierten einem Patch? Gibt es einige Probleme mit Corutines?
Ihre Frage ein wenig zu kurz ist, eine MCVE bereitzustellen. Ich habe ein paar Fehler nach dem Kopieren-Einfügen Ihres Codes konfrontiert: 1. Verwendung von 'erwarten' in einer Nicht-Coroutine-Funktion' test_my_case' 2. Missing 'module.py', die' msg() 'definiert. Ich habe versucht, diese Fehler zu beheben, aber es wäre besser, wenn Sie Ihre Frage verbessern. – Leon