9

我正在为一些检查值的代码编写测试os.environ(我知道这不是最佳的,但我必须接受它)。我想在测试期间从 os.environ 中删除一个条目。我不确定 mock 是否支持这一点。我知道patch.dict可以用来修改一个项目,但我想删除键/值对。我想要一些类似的东西:

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', ... }

有没有办法完成这样的壮举?

4

2 回答 2

19

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
于 2015-03-24T21:40:04.480 回答
1

要删除该项目,您可以简单地使用:

my_thing = os.environ['MY_THING']  # Gotta store it to restore it later
del os.environ['MY_THING']

然后使用以下命令恢复它:

os.environ['MY_THING'] = my_thing
于 2015-03-24T21:33:57.280 回答