簡體   English   中英

將可迭代的方法定義為 mock side_effect

[英]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 ,並在其中調用func1func2 這是有效的,因為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.

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