【发布时间】:2021-07-23 10:06:18
【问题描述】:
我想使用 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() 类的实例实际上不在主函数中,而是在另一个模块中,因此我无法模拟该实例。我一般需要它作为 B 的所有实例的装饰器。
总结:我不确定如何单独模拟类方法,但仍然调用原始方法。之后,我想使用call_args_list 之类的东西,在那里我可以看到对foo() 的所有调用。
【问题讨论】:
-
你想在这里实现什么,实际测试的是什么?
-
@jonrsharpe 谢谢它不相关。我已经删除了标签。
-
什么不相关?如果你不测试,你为什么要嘲笑任何东西?
-
相关部分是我需要模拟一个类方法并保持原始方法工作。我想模拟,因为它带有 call_args_list 和其他有用的功能。