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()
takes arbitrary keyword arguments. These will be passed to AsyncMock
if the patched object is asynchronous, to MagicMock
otherwise or to new_callable
if specified.
来自 mock.patch.object 的文档:
Like patch()
, patch.object()
takes arbitrary keyword arguments for configuring the mock object it creates.
并且从mock.Mock的文档中,实际使用的地方:
return_value
: The value returned when the mock is called. By default this is a new Mock (created on first access). See the return_value
attribute.
为了更好地衡量,return_value
属性的文档显示了示例的用法:
设置它以配置值 return 通过调用 mock:
>>> mock = Mock()
>>> mock.return_value = 'fish'
>>> mock()
'fish'
默认的return值是一个模拟对象,你可以用正常的方式配置它:
>>> 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
所以,如您所见,这一切都有详细的记录,但不可否认,由于签名中没有参数,乍一看可能会被忽略。
我看过 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()
takes arbitrary keyword arguments. These will be passed toAsyncMock
if the patched object is asynchronous, toMagicMock
otherwise or tonew_callable
if specified.
来自 mock.patch.object 的文档:
Like
patch()
,patch.object()
takes arbitrary keyword arguments for configuring the mock object it creates.
并且从mock.Mock的文档中,实际使用的地方:
return_value
: The value returned when the mock is called. By default this is a new Mock (created on first access). See thereturn_value
attribute.
为了更好地衡量,return_value
属性的文档显示了示例的用法:
设置它以配置值 return 通过调用 mock:
>>> mock = Mock()
>>> mock.return_value = 'fish'
>>> mock()
'fish'
默认的return值是一个模拟对象,你可以用正常的方式配置它:
>>> 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
所以,如您所见,这一切都有详细的记录,但不可否认,由于签名中没有参数,乍一看可能会被忽略。