我想计算一个函数在测试中被调用的次数。 我无法保存原始函数对象以模拟函数,但仍然具有原始逻辑。原因是,该函数是从类的不同实例中调用的,这些实例是在函数本身中创建的。
例如:
class A(object):
def do_something(self):
new_instance = A()
new_instance.do_something()
........
所以,我不能这样嘲笑:
from mock import patch
def test():
instance = A()
original_do_something = instance.do_something
with patch('A.do_something', original_do_something) as do_something_mock:
instance.do_something()
assert do_something_mock.call_count == 5
这将以StackOverflow结尾,因为类A
的所有不同实例将调用我创建的A
的第一个实例的原始函数。它将继续创建将调用原始do_something
的实例,并创建更多实例,等等。
有人知道一种在不改变逻辑的情况下对来自所有不同实例的do_something
的所有函数调用进行计数的方法吗?
(Python 2.7)
谢谢!
答案 0 :(得分:1)
有一个带有静态计数器的模拟类:
class AMock(A):
count = 0
def do_something(self):
AMock.count += 1
return super(AMock, self).do_something()
测试:
from mock import patch
def test():
instance = A()
original_do_something = instance.do_something
with patch('A', AMock):
instance.do_something()
assert AMock.count == 5