如何修补由另一个文件使用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
?
在您给出的情况下,您不一定需要 patch.object 来修改值。你可以这样做:
测试.py:
from f import foo
import f
f.some_var = 'test-val'
def test():
foo()
然后 Foo 将在您给出的情况下打印出“test-val”。
相反,如果您有一个需要模拟的函数,除了史蒂夫的示例之外,您还可以使用 patch.object 作为装饰器。
测试.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()
文件
from f2 import some_fn
def foo():
print some_fn()
f2.py
def some_fn():
print 'stuff'
无需亲自尝试:
#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
运行时就位。我只是import f2
在“f 文件”中使用,并引用some_var
为f2.some_var
.
---edit--- 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