Python中的虚拟对象

时间:2014-02-27 20:35:02

标签: python

是否有可能在Python中创建一个“愚蠢”的虚拟对象,无论如何被调用或以其他方式操作,它总是无操作并且永远不会抛出错误?

用例就是在正常情况下有一个用于创建副作用的对象,但是如果在不同的环境中运行(假设在开发期间)不应该做任何事情并且无声地失败。

try:
    o = Obj()
except ImportError:
    # we're in development mode
    o = DummyObj()

o.doStuff()  # should work or fail silently

1 个答案:

答案 0 :(得分:6)

尝试使用Mock个对象。对Mock对象进行的任何调用都将返回另一个Mock对象。

例如:

>>> from mock import Mock
>>> test = Mock()
>>> test.doStuff()
<Mock name='mock.doStuff()' id='4373729360'>
>>> test2 = test.doStuff
>>> test2
<Mock name='mock.doStuff' id='4373693712'>
>>> test2()
<Mock name='mock.doStuff()' id='4373729360'>

如此处所示,它是一致的 - 多次调用doStuff()会返回相同的Mock,如果您调用Mock创建的mock.doStuff,它将返回相同的内容MockdoStuff()

模拟对象通常用于单元测试中,因此除了我在此处显示的内容之外,您还可以使用它们。如果您有兴趣,请阅读更多here