簡體   English   中英

在Python中使用mock.patch

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM