Python中的虚拟对象

Python中的虚拟对象,python,Python,有没有可能在Python中创建一个“愚蠢”的伪对象,无论如何调用或以其他方式操作,它都不会执行任何操作,也不会抛出错误 这种情况下的用例是,在正常情况下,有一个对象用于创建副作用,但是如果在不同的环境中运行(假设在开发过程中),则不应该执行任何操作,并且以静默方式失败 try: o = Obj() except ImportError: # we're in development mode o = DummyObj() o.doStuff() # should wo

有没有可能在Python中创建一个“愚蠢”的伪对象,无论如何调用或以其他方式操作,它都不会执行任何操作,也不会抛出错误

这种情况下的用例是,在正常情况下,有一个对象用于创建副作用,但是如果在不同的环境中运行(假设在开发过程中),则不应该执行任何操作,并且以静默方式失败

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

o.doStuff()  # should work or fail silently

尝试使用
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'>
来自模拟导入模拟的
>>
>>>test=Mock()
>>>test.doStuff()
>>>test2=test.doStuff
>>>测试2
>>>test2()
如图所示,它是一致的-多次调用
doStuff()
返回相同的
Mock
,如果调用由
Mock.doStuff
创建的
Mock
,它将返回与
doStuff()
相同的
Mock


模拟对象通常用于单元测试,因此您可以使用它们做的事情比我在这里介绍的多得多。如果您感兴趣,请阅读更多。

是的,这就是我一直在寻找的:)我认为有一种更简单的方法可以不用使用
mock
来完成这项工作,但这种方法可以处理每一个场景。谢谢请不要在生产中使用模拟!