使用 ContextManager 覆盖多个全局变量
Overriding multiple global variables with ContextManager
在 Python 2.7 中是否有 utility/pattern 来覆盖上下文中的多个全局变量? IE 类似
var1 = someval
var2 = someotherval
with my_context(var1=newval1, var2=newval2,...):
print var1 # prints newval1
是的,但它是 unittest.mock.patch
的事实应该告诉您一些关于它的用途的信息:
import unittest.mock
with unittest.mock.patch('module.thing', replacement_thing):
do_whatever()
如果你想在同一个调用中修补多个东西,你可以使用unittest.mock.patch.multiple
:
from unittest.mock import patch
with patch.multiple(module, thing1=replacement_thing, thing2=other_thing):
# module.thing1 and module.thing2 are now patched
do_whatever()
只要确保 none 你想要修补的东西恰好与该函数的参数名称冲突(target
、spec
、create
、spec_set
、autospec
或 new_callable
)。如果他们这样做,请回到常规 patch
.
如果您想出于非单元测试目的执行此操作,您可能需要重新考虑您的设计。
如果您使用的是 Python 2 而 unittest.mock
不在标准库中,您可以从 PyPI 下载 backport。这个叫 mock
而不是 unittest.mock
.
在 Python 2.7 中是否有 utility/pattern 来覆盖上下文中的多个全局变量? IE 类似
var1 = someval
var2 = someotherval
with my_context(var1=newval1, var2=newval2,...):
print var1 # prints newval1
是的,但它是 unittest.mock.patch
的事实应该告诉您一些关于它的用途的信息:
import unittest.mock
with unittest.mock.patch('module.thing', replacement_thing):
do_whatever()
如果你想在同一个调用中修补多个东西,你可以使用unittest.mock.patch.multiple
:
from unittest.mock import patch
with patch.multiple(module, thing1=replacement_thing, thing2=other_thing):
# module.thing1 and module.thing2 are now patched
do_whatever()
只要确保 none 你想要修补的东西恰好与该函数的参数名称冲突(target
、spec
、create
、spec_set
、autospec
或 new_callable
)。如果他们这样做,请回到常规 patch
.
如果您想出于非单元测试目的执行此操作,您可能需要重新考虑您的设计。
如果您使用的是 Python 2 而 unittest.mock
不在标准库中,您可以从 PyPI 下载 backport。这个叫 mock
而不是 unittest.mock
.