Ich versuche zu testen, dass ein Rückruf von einer Funktion in einem meiner verpackten Objekte aufgerufen wird. Mock.patch.object erlaubt mir jedoch nicht, eine Funktion aus dem aktuellen Testfall zu verspotten. Unter der Annahme, ich habe folgende (vereinfachte) Code und Test:Python-UnitTesting und Mock: Mock-Funktion aus dem Testfall?
import unittest
from six.moves import cStringIO
from mock import patch
class myclass(object):
def __init__(self, callback):
self.callback = callback
def myfunc(key):
self.callback(key)
# other stuff with key
class MyTest(unittest.TestCase):
def setUp(self):
self.myobj = myobj(self._callback)
self.cache_store = cStringIO()
def _callback(self, key):
self.cache_store.write(key)
self.cache_store.seek(0)
@patch.object('__main__.MyTest', '_callback')
def test_callback_called(self, mock):
self.myobj.myfunc("any string")
self.assertTrue(mock.called)
self.assertEqual(self.cache_store.read(), "any string")
ich den Fehler
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/mock/mock.py", line 1297, in patched
arg = patching.__enter__()
File "/usr/local/lib/python3.4/dist-packages/mock/mock.py", line 1369, in __enter__
original, local = self.get_original()
File "/usr/local/lib/python3.4/dist-packages/mock/mock.py", line 1343, in get_original
"%s does not have the attribute %r" % (target, name)
AttributeError: __main__.MyTest does not have the attribute '_callback'
Also meine Frage ist: Wie kann ich verspotten eine Funktion aus dem aktuellen Testfall?