我想使用补丁来记录对单元测试类中的函数进行的所有函数调用,但需要原始函数仍按预期运行。我在下面创建了一个虚拟代码示例:
from mock import patch
class A(object):
def __init__(self):
self._a = 1
class B(A):
def __init__(self):
super(B, self).__init__() # TypeError: super() argument 1 must be type, not MagicMock
self._b = 11
def bar(self, b):
self._b = self._b + 1 + b
def foo(self, b):
self.bar(b)
class MockB(B):
def foo(self, b):
super(MockB, self).foo(self, b)
@patch('main.B')
def main(b_class):
b_class.side_effect = MockB
b = B()
print b._b # 11
b.foo(0)
print b._b # 12
main()
Run Code Online (Sandbox Code Playgroud)
就我而言,该类的实例b = B()实际上不在主函数中,而是在另一个模块中,因此我无法模拟该实例。我需要它一般作为 B 的所有实例的装饰器。
总结:我不确定如何单独模拟类方法,但仍然调用原始方法。之后,我想使用call_args_list 之类的东西,在那里我可以看到对foo().