Да, я могу дать вам план, но мой Python является бит ржавый, и я слишком занят, чтобы объяснить подробно.
В принципе, вам нужно поставить прокси в метод, который будет вызывать оригинал, например:
class fred(object):
def blog(self):
print "We Blog"
class methCallLogger(object):
def __init__(self, meth):
self.meth = meth
def __call__(self, code=None):
self.meth()
# would also log the fact that it invoked the method
#example
f = fred()
f.blog = methCallLogger(f.blog)
Это StackOverflow answer о вызываемая может помочь вам понять выше.
Более подробно:
Хотя ответ был принят из-за интересную дискуссию с Гленн и имея несколько минут бесплатно, я хотел бы увеличить на мой ответ:
# helper class defined elsewhere
class methCallLogger(object):
def __init__(self, meth):
self.meth = meth
self.was_called = False
def __call__(self, code=None):
self.meth()
self.was_called = True
#example
class fred(object):
def blog(self):
print "We Blog"
f = fred()
g = fred()
f.blog = methCallLogger(f.blog)
g.blog = methCallLogger(g.blog)
f.blog()
assert(f.blog.was_called)
assert(not g.blog.was_called)
+1 за дискретно просвещающий мой мир с замечательным модулем Mock. –
@RonCohen: Да, это довольно удивительно, и все время улучшаться. :) – Macke
При использовании mock, безусловно, путь, я бы посоветовал использовать assert_called_once, просто не существует :) – FelixCQ