0

foo()によって使用され、別のファイルからインポートされた変数にパッチを適用するにはどうすればよいですか?

test file:
from f import foo

def test():
  foo()


f file:
from f2 import some_var

def foo():
  print some_var

some_varin file が 10 であっても、が から呼び出されfたときに別の値が必要になる場合があります。を使用してそれを達成するにはどうすればよいですか?foo()test()mock.patch.object

4

2 に答える 2

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'
于 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

some_var「fファイル」を使用してインポートしているため、実行from f2 import some_var時にパッチが配置されていることを確認する必要がありますfrom f2 import some_varimport f2代わりに in "f file" を使用し、 some_varasを参照しf2.some_varます。

---編集---もちろん、テストクラスでこれを行うことができます:

#test file
import f
import mock

def test():
    with mock.patch('f.some_var', 'your-new-value-for-somevar'):

これにより、によってsome_varコピーされた値にパッチが適用されますffrom f2 import some_var

于 2013-07-18T10:00:40.473 に答える