Python中的虚拟对象
有没有可能在Python中创建一个“愚蠢”的伪对象,无论如何调用或以其他方式操作,它都不会执行任何操作,也不会抛出错误 这种情况下的用例是,在正常情况下,有一个对象用于创建副作用,但是如果在不同的环境中运行(假设在开发过程中),则不应该执行任何操作,并且以静默方式失败Python中的虚拟对象,python,Python,有没有可能在Python中创建一个“愚蠢”的伪对象,无论如何调用或以其他方式操作,它都不会执行任何操作,也不会抛出错误 这种情况下的用例是,在正常情况下,有一个对象用于创建副作用,但是如果在不同的环境中运行(假设在开发过程中),则不应该执行任何操作,并且以静默方式失败 try: o = Obj() except ImportError: # we're in development mode o = DummyObj() o.doStuff() # should wo
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
来完成这项工作,但这种方法可以处理每一个场景。谢谢请不要在生产中使用模拟!