Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python';s mock从dict中临时删除对象_Python_Unit Testing_Testing_Mocking_Python Mock - Fatal编程技术网

使用python';s mock从dict中临时删除对象

使用python';s mock从dict中临时删除对象,python,unit-testing,testing,mocking,python-mock,Python,Unit Testing,Testing,Mocking,Python Mock,我正在为一些代码编写一个测试,以检查os.environ中的值(我知道这不是最优的,但我必须这样做)。我想在测试期间从os.environ中删除一个条目。我不确定mock是否支持这一点。我知道patch.dict可用于修改项目,但我希望删除键/值对。我想要一些大致如下的东西: print os.environ { ... , 'MY_THING': 'foo', ... } with mock.patch.dict.delete('os.environ', 'MY_THING'): #

我正在为一些代码编写一个测试,以检查
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', ... }

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

要删除该项目,您只需使用:

my_thing = os.environ['MY_THING']  # Gotta store it to restore it later
del os.environ['MY_THING']
然后使用以下命令恢复它:

os.environ['MY_THING'] = my_thing
与示例所需的代码不太一样<代码>补丁。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(或使用
MY\u THING=os.environ.pop('MY\u THING')删除我的东西
并省略
del
。如果您希望它的形式与
with
一起使用,请使用执行删除的方法
\uuuuu enter\uuuu
和执行还原的方法
\uu exit\uuu
创建一个类
DictDelete
。然后将
与DictDelete()一起使用
。我会很好地格式化它,但注释是有限的。这可能会破坏其他testmock.patch.dict的工作方式,因为它是我自己编的:)不过你的解决方案对我来说很有效。