コールバック関数を渡すのではなく、ブリンカー ライブラリを使用するように既存のコードをリファクタリング中です。コールバックが正しく起動されることを確認するためにモックを使用する既存のテストの大規模なセットがあります。ただし、ブリンカーを使用する新しいコードに対してテストを実行しようとすると、モック内から例外が発生します。
例外は repl で簡単に複製でき、これはブリンカー__name__
がモックの属性にアクセスしようとしていることが原因です。
>>> from mock import Mock
>>> from blinker import signal
>>>
>>> test = signal('test')
>>> m = Mock()
>>>
>>> test.connect(m)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/ed/.virtualenvs/iws/lib/python2.7/site-packages/blinker/base.py", line 113, in connect
receiver_ref = reference(receiver, self._cleanup_receiver)
File "/Users/ed/.virtualenvs/iws/lib/python2.7/site-packages/blinker/_utilities.py", line 124, in reference
weak = callable_reference(object, callback)
File "/Users/ed/.virtualenvs/iws/lib/python2.7/site-packages/blinker/_utilities.py", line 135, in callable_reference
return BoundMethodWeakref(target=object, on_delete=callback)
File "/Users/ed/.virtualenvs/iws/lib/python2.7/site-packages/blinker/_saferef.py", line 143, in __new__
base.__init__(target, on_delete, *arguments, **named)
File "/Users/ed/.virtualenvs/iws/lib/python2.7/site-packages/blinker/_saferef.py", line 188, in __init__
self.func_name = str(im_func.__name__)
File "/Users/ed/.virtualenvs/iws/lib/python2.7/site-packages/mock.py", line 702, in __getattr__
raise AttributeError(name)
MagicMock は同じ例外を発生させます。
例外が発生しないようにモックを準備する方法を理解できませんでした。モックをダミー関数に置き換えて、その中にテストを書くこともできますが、1000 以上のテストがあります。