9

値をチェックするコードのテストを書いていますos.environ(これが最適ではないことはわかっていますが、それを使用する必要があります)。テスト中に os.environ からエントリを削除したいと思います。モックがこれをサポートしているかどうかはわかりません。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 に答える