私は単体テストを書いてテストしています。私はすでに存在するオブジェクトのメソッドをモックしたいです。 しかし、asyncioのコルーチンのように、それは見た目ほど単純ではありません。 私はMagickMockを使用しようとしましたが、動作しません。エラーや例外はありませんが、デバッガではf()が呼び出されないことがわかります。すでにインスタンス化されたオブジェクトのメソッドをモックします
私はこのように見えるパッチを適用する私のテストやオブジェクト:
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
どのように私はいくつかのカスタム1で既にインスタンスオブジェクトのメソッドにパッチを適用することができますか?コルーチンに関するいくつかの問題はありますか?
あなたの質問はMCVEを提供するという少し短いです。コードをコピーした後、いくつかのエラーに直面しました:1.非コルーチン関数 'test_my_case'の中で' await'を使う。2. 'msg()'を定義する 'module.py'がありません。私はそれらのエラーを私の理解の中で解決しようとしましたが、あなたの質問を改善する方が良いでしょう。 – Leon