[英]Python mock patch a function called by another function
def f1():
return 10, True
def f2():
num, stat = f1()
return 2*num, stat
如何使用 python 的模擬庫來修補f1()
並返回自定義結果以便我可以測試f2()
?
編輯:我的測試有問題嗎? 這似乎不起作用,所有測試都因 AssertionError 而失敗
from foo.bar import f2
from mock import patch
class MyTest(TestCase):
def test_f2_1(self):
with patch('project.module.f1') as some_func:
some_func.return_value = (20, False)
num, stat = f2()
self.assertEqual((num, stat), (40, False))
@patch('project.module.f1')
def test_f2_2(self, some_func):
some_func.return_value = (20, False)
num, stat = f2()
self.assertEqual((num, stat), (40, False))
第一個示例表明 f1() 和 f2() 定義在同一模塊中。 因此,以下應該工作:
from foo.bar import f2
from mock import patch
class MyTest(TestCase):
@patch('foo.bar.f1')
def test_f2_2(self, some_func):
some_func.return_value = (20, False)
num, stat = f2()
self.assertEqual((num, stat), (40, False))
補丁與導入相同: @patch('foo.bar.f1')
關於這個問題,這里有一個很好的答案:
http://bhfsteve.blogspot.nl/2012/06/patching-tip-using-mocks-in-python-unit.html
假設您正在使用這個模擬庫:
def f1():
return 10, True
def f2():
num, stat = f1()
return 2*num, stat
import mock
print f2() # Unchanged f1 -> prints (20, True)
with mock.patch('__main__.f1') as MockClass: # replace f1 with MockClass
MockClass.return_value = (30, True) # Change the return value
print f2() # f2 with changed f1 -> prints (60, True)
如果您的代碼分為多個模塊,您可能需要將__main__.f1
替換為您的模塊/函數的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.