[英]Define an iterable of methods as mock side_effect
我正在嘗試將兩種方法定義為模擬side_effect
上的副作用。問題不是調用函數,而是返回它們。
一個簡短的例子:
def func1(x):
return x + 1
def func2(x):
return x + 2
mock = mock.Mock(side_effect=[func1, func2])
mock(1)
mock(1)
回報:
<function func1 at 0x7fe9a81d11a0>
<function func2 at 0x7fe9b021af10>
有沒有辦法讓連續提供的 arguments 模擬調用函數,所以 output 將如下所示:
2
3
我相信有兩種解決方案。 第一個是創建一些總體 function, mock_func
,並在其中調用func1
和func2
; 這是有效的,因為side_effect
將調用 function 如果這是唯一傳遞的參數。
如果您傳入 function,它將使用與模擬相同的 arguments 進行調用,除非 function 返回默認值 singleton,否則對模擬的調用將返回 function 返回的任何內容。 如果 function 返回 DEFAULT,則模擬將返回其正常值(來自 return_value)。
def mock_func():
func1()
func2()
或者,我的簡短測試表明,雖然分配a=[func1,func2]
將返回一個函數列表(這是預期的行為),但分配a=[func1(),func2()]
將在分配它們時調用它們。 不過,我不認為這會按預期工作,並建議使用第一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.