【发布时间】:2013-11-06 16:33:33
【问题描述】:
我正在测试一个从另一个非常复杂的类继承的类,具有数据库连接方法和一堆依赖项。我想模拟它的基类,以便我可以很好地使用子类中定义的方法,但是在我从模拟类继承的那一刻,对象本身变成了模拟并丢失了它的所有方法。
如何模拟超类?
这种情况或多或少可以概括为:
import mock
ClassMock = mock.MagicMock()
class RealClass(ClassMock):
def lol(self):
print 'lol'
real = RealClass()
real.lol() # Does not print lol, but returns another mock
print real # prints <MagicMock id='...'>
这是一个简化的案例。实际发生的情况是 RealClass 扩展了 AnotherClass,但我设法拦截了 AnotherClass 并将其替换为模拟。
【问题讨论】:
-
你真的需要一个 Mock 对象作为基类吗?一个简单的
object会起作用吗? -
什么是 MagicMock?类还是类生成器?通常你只会
class RealClass(mock.MagicMock):
标签: python unit-testing inheritance mocking