簡體   English   中英

unittest.mock.patch 的(未記錄的)return_value 參數如何工作?

[英]How does the (undocumented) return_value argument for unittest.mock.patch work?

我已經看到了unittest.mock.patch()unittest.mock.patch.object()直接使用return_value參數的例子。

例子:

with patch.object(ProductionClass, 'method', return_value=None) as mock_method:
    thing = ProductionClass()
    thing.method(1, 2, 3)

然而,這個論點沒有正式記錄在unittest.mock.patch()unittest.mock.patch.object() (然而它在官方文檔的示例中使用)。

這是支持還是未定義的行為? 它應該被記錄在案嗎,不是嗎? 這些例子是巧合嗎? 這個論點有什么作用? 它做了一些不直觀的事情,還是不言自明?

來自mock.patch的文檔:

patch()接受任意關鍵字參數。 這些將被傳遞到AsyncMock如果修補的物體是異步的,以MagicMock否則或new_callable如果指定。

mock.patch.object的文檔:

patch()一樣, patch.object()任意關鍵字參數來配置它創建的模擬對象。

mock.Mock的文檔來看,它實際使用的地方:

return_value :調用模擬時返回的值。 默認情況下,這是一個新的 Mock(在第一次訪問時創建)。 請參閱return_value屬性。

為了更好地衡量, return_value屬性的文檔,其中顯示了示例的用法:

設置此項以配置通過調用模擬返回的值:

>>> mock = Mock()
>>> mock.return_value = 'fish'
>>> mock()
'fish'

默認返回值是一個模擬對象,您可以按正常方式配置它:

>>> mock = Mock()
>>> mock.return_value.attribute = sentinel.Attribute
>>> mock.return_value()
<Mock name='mock()()' id='...'>
>>> mock.return_value.assert_called_with()

return_value也可以在構造函數中設置:

>>> mock = Mock(return_value=3)
>>> mock.return_value
3
>>> mock()
3

因此,正如您所看到的,這一切都有據可查,盡管不可否認,由於簽名中不存在參數,乍一看可能會忽略它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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