[英]Using mock.patch in Python
如何修补foo()
使用的变量,该变量是从另一个文件导入的?
test file:
from f import foo
def test():
foo()
f file:
from f2 import some_var
def foo():
print some_var
即使f
文件中的some_var
为10,当从test()
调用foo()
时,我仍可能希望它具有另一个值。 我如何使用mock.patch.object
来实现?
我自己不尝试:
#test file
import f2
import mock
def test():
with mock.patch('f2.some_var', 'your-new-value-for-somevar'):
# your test code
如要导入some_var
使用from f2 import some_var
在“F文件”,那么你就需要确保该补丁的地方,当from f2 import some_var
运行。 我只是在“ f文件”中使用import f2
,并将some_var
称为f2.some_var
。
---编辑---加,您当然可以在测试班级中这样做:
#test file
import f
import mock
def test():
with mock.patch('f.some_var', 'your-new-value-for-somevar'):
这将修补的价值some_var
已复制到f
通过from f2 import some_var
在给出的情况下,不一定需要使用patch.object来修改值。 您可以这样做:
test.py:
from f import foo
import f
f.some_var = 'test-val'
def test():
foo()
Foo将在您给出的情况下打印出“ test-val”。
相反,如果您有一个需要模拟的函数,则可以在Steve的示例之外将patch.object用作装饰器。
test.py
from mock import patch
from f import foo
import f
@patch.object(f, 'some_fn')
def test(some_fn_mock):
some_fn_mock.return_value = 'new-stuff'
f.foo()
test()
py
from f2 import some_fn
def foo():
print some_fn()
f2.py
def some_fn():
print 'stuff'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.