Python Patch/Mock类方法,但仍调用原始方法
Python Patch/Mock类方法,但仍调用原始方法
我想使用patch来记录在一个类的函数中调用的所有函数调用,以便进行单元测试,但仍然需要原始函数按预期运行。我在下面创建了一个虚拟代码示例:
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()
在我的情况下,类的实例b = B()
实际上不在main函数中,而是在另一个模块中,所以我不能Mock实例。我需要它能够通用地作为B类的所有实例的装饰器。我不确定如何单独模拟类方法本身,但仍然调用原始方法。之后,我想使用类似call_args_list的东西,可以看到对foo()
的所有调用。