0

如何修补由另一个文件使用foo()和从另一个文件导入的变量?

test file:
from f import foo

def test():
  foo()


f file:
from f2 import some_var

def foo():
  print some_var

即使some_varf文件中是 10,我可能希望它有另一个值,当foo()test(). 我怎样才能做到这一点mock.patch.object

4

2 回答 2

0

在您给出的情况下,您不一定需要 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'
于 2013-07-18T21:38:12.633 回答
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_varfrom f2 import some_var,您需要确保补丁在from f2 import some_var运行时就位。我只是import f2在“f 文件”中使用,并引用some_varf2.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

于 2013-07-18T10:00:40.473 回答