diff options
-rw-r--r-- | docs/mock.txt | 13 | ||||
-rw-r--r-- | mock.py | 3 | ||||
-rw-r--r-- | tests/testhelpers.py | 11 |
3 files changed, 27 insertions, 0 deletions
diff --git a/docs/mock.txt b/docs/mock.txt index 432f5a9..e5dcd60 100644 --- a/docs/mock.txt +++ b/docs/mock.txt @@ -602,6 +602,19 @@ 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: + +.. doctest:: + + >>> m = MagicMock() + >>> p = PropertyMock(return_value=3) + >>> type(m).foo = p + >>> m.foo + 3 + >>> p.assert_called_once_with() + .. index:: __call__ .. index:: calling @@ -2304,6 +2304,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): diff --git a/tests/testhelpers.py b/tests/testhelpers.py index e80321d..b92f511 100644 --- a/tests/testhelpers.py +++ b/tests/testhelpers.py @@ -881,5 +881,16 @@ class TestCallList(unittest2.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__': unittest2.main() |