如何修补foo()
使用的变量以及从其他文件导入的变量?
test file:
from f import foo
def test():
foo()
f file:
from f2 import some_var
def foo():
print some_var
即使some_var
文件中的f
为10,我也可能希望它从foo()
调用test()
时有另一个值。如何使用mock.patch.object
实现这一目标?
答案 0 :(得分:0)
不亲自尝试:
#test file
import f2
import mock
def test():
with mock.patch('f2.some_var', 'your-new-value-for-somevar'):
# your test code
当您在“f文件”中使用some_var
导入from f2 import some_var
时,您需要确保在from f2 import some_var
运行时修补程序就位。我只是在“f file”中使用import f2
,并将some_var
称为f2.some_var
。
--- ---编辑 Gah,你当然可以在你的测试课中做到这一点:
#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
复制的值{{1}}
答案 1 :(得分:0)
在您给出的情况下,您不一定需要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()
f.py
from f2 import some_fn
def foo():
print some_fn()
f2.py
def some_fn():
print 'stuff'