mirror of https://github.com/python/cpython
unittest.mock.PropertyMock return value and attributes are now standard MagicMocks
This commit is contained in:
parent
633b32a7fa
commit
c287062fcf
|
@ -712,6 +712,17 @@ have to create a dictionary and unpack it using `**`:
|
|||
>>> mock_foo.mock_calls
|
||||
[call(), call(6)]
|
||||
|
||||
Because of the way mock attributes are stored you can't directly attach a
|
||||
`PropertyMock` to a mock object. Instead you can attach it to the mock type
|
||||
object::
|
||||
|
||||
>>> m = MagicMock()
|
||||
>>> p = PropertyMock(return_value=3)
|
||||
>>> type(m).foo = p
|
||||
>>> m.foo
|
||||
3
|
||||
>>> p.assert_called_once_with()
|
||||
|
||||
|
||||
Calling
|
||||
~~~~~~~
|
||||
|
|
|
@ -2166,6 +2166,9 @@ class PropertyMock(Mock):
|
|||
Fetching a `PropertyMock` instance from an object calls the mock, with
|
||||
no args. Setting it calls the mock with the value being set.
|
||||
"""
|
||||
def _get_child_mock(self, **kwargs):
|
||||
return MagicMock(**kwargs)
|
||||
|
||||
def __get__(self, obj, obj_type):
|
||||
return self()
|
||||
def __set__(self, obj, val):
|
||||
|
|
|
@ -831,5 +831,16 @@ class TestCallList(unittest.TestCase):
|
|||
p.stop()
|
||||
|
||||
|
||||
def test_propertymock_returnvalue(self):
|
||||
m = MagicMock()
|
||||
p = PropertyMock()
|
||||
type(m).foo = p
|
||||
|
||||
returned = m.foo
|
||||
p.assert_called_once_with()
|
||||
self.assertIsInstance(returned, MagicMock)
|
||||
self.assertNotIsInstance(returned, PropertyMock)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue