使用 python 的模拟从字典中临时删除一个对象
Using python's mock to temporarily delete an object from a dict
我正在为一些检查 os.environ
中的值的代码编写测试(我知道这不是最佳的,但我必须接受它)。我想在测试期间从 os.environ 中删除一个条目。我不确定 mock 是否支持这个。我知道 patch.dict
可用于修改项目,但我想删除 key/value 对。我想要这样的东西:
print os.environ
{ ... , 'MY_THING': 'foo', ... }
with mock.patch.dict.delete('os.environ', 'MY_THING'):
# run the test
# ( 'MY_THING' in os.environ ) should return False
# everything back to normal now
print os.environ
{ ... , 'MY_THING': 'foo', ... }
有没有办法实现这样的壮举?
要删除项目,您可以简单地使用:
my_thing = os.environ['MY_THING'] # Gotta store it to restore it later
del os.environ['MY_THING']
然后使用以下方法恢复它:
os.environ['MY_THING'] = my_thing
mock.patch.dict
与您所需的示例代码不太一样。 patch.dict
是一个需要参数的函数。你可能想像这样使用它:
>>> import os
>>> import mock
>>> with mock.patch.dict('os.environ'):
... del os.environ['PATH']
... print 'PATH' in os.environ
...
False
>>> print 'PATH' in os.environ
True
我正在为一些检查 os.environ
中的值的代码编写测试(我知道这不是最佳的,但我必须接受它)。我想在测试期间从 os.environ 中删除一个条目。我不确定 mock 是否支持这个。我知道 patch.dict
可用于修改项目,但我想删除 key/value 对。我想要这样的东西:
print os.environ
{ ... , 'MY_THING': 'foo', ... }
with mock.patch.dict.delete('os.environ', 'MY_THING'):
# run the test
# ( 'MY_THING' in os.environ ) should return False
# everything back to normal now
print os.environ
{ ... , 'MY_THING': 'foo', ... }
有没有办法实现这样的壮举?
要删除项目,您可以简单地使用:
my_thing = os.environ['MY_THING'] # Gotta store it to restore it later
del os.environ['MY_THING']
然后使用以下方法恢复它:
os.environ['MY_THING'] = my_thing
mock.patch.dict
与您所需的示例代码不太一样。 patch.dict
是一个需要参数的函数。你可能想像这样使用它:
>>> import os
>>> import mock
>>> with mock.patch.dict('os.environ'):
... del os.environ['PATH']
... print 'PATH' in os.environ
...
False
>>> print 'PATH' in os.environ
True