我試圖通過模擬其中的其他兩個函式來測驗我的函式:我的代碼如下:
import random
def generate_numbers():
res = []
for i in range(3):
res.append(random.randint(1,10))
return res
def my_func():
numbers = generate_numbers()
import pdb
pdb.set_trace()
for number in numbers:
print(number)
pdb.set_trace()
if number == 3:
empty_function(number)
if number == 9:
empty_function(number)
return None
def empty_function(number):
print('test')
我的測驗是這樣的:
from unittest.mock import patch
from func import my_func
@patch('func.generate_numbers')
@patch('func.empty_function')
def test_my_func(mock_numbers, mock_empty_function):
mock_numbers.return_value = [2, 3, 2]
my_func()
mock_empty_function.assert_called_once()
我在這里遇到的問題是,當我只是模擬生成數字功能時,一切都按預期作業。但后來我決定我要斷言函式 empty_function 是否被呼叫,這就是問題所在。由于我模擬了該函式,因此似乎沒有輸入回圈,并且無論我模擬什么數字到 generate_numbers,斷言總是通過,這顯然是錯誤的。
這里有人可以看看這個并幫助我嗎?
uj5u.com熱心網友回復:
對于多個補丁,它遵循堆疊方法。引數宣告遵循與裝飾器的自下而上映射。
參考:https ://docs.python.org/3/library/unittest.mock.html#nesting-patch-decorators
因此,正確的代碼就變成了。
from unittest.mock import patch
from func import my_func
@patch('func.empty_function')
@patch('func.generate_numbers')
def test_my_func(mock_numbers, mock_empty_function):
mock_numbers.return_value = [2,3,2]
my_func()
mock_empty_function.assert_called_once()
注意 empty_function 是頂部裝飾器但最后一個引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434125.html
上一篇:正則運算式捕獲Maven測驗輸出
下一篇:不應該通過的測驗
