[New-bugs-announce] [issue30541] Add restricted mocks to the python unittest mocking framework

Mario Corchero report at bugs.python.org
Thu Jun 1 16:16:56 EDT 2017


New submission from Mario Corchero:

Define a way to disable the automatic generation of submocks when accessing an attribute of a mock which is not set.


Rationale:
Inspired by GMock RestrictedMock, it aims to allow the developer to declare a narrow interface to the mock that defines what the mocks allows to be called on.
The feature of mocks returning mocks by default is extremely useful but not always desired. Quite often you rely on it only at the time you are writing the test but you want it to be disabled at the time the mock is passed into your code.

It also prevents user errors when mocking incorrect paths or having typos when calling attributes/methods of the mock.
We have tried it internally in our company and it gives quite a nicer user experience for many use cases, specially for new users of mock as it helps out when you mock the wrong path.

Posible interfaces:
New Mock type, SeledMock which can be used instead of the "common" mock that has an attribute "sealed" which once set to true disables the dynamic generation of "submocks"


The final goal is to be able to write tests like:

>>> m = mock.Mock()  # or = mock.SealableMock()
>>> m.method1.return_value.attr1.method2.return_value = 1
>>> mock.seal(m)  # or mock.sealed = True

>>> m.method1().attr1.method2()  # This path has been declared above
# 1
>>> m.method1().attr2  # This was not defined so it is going to raise a meaningful exception
# Exception: SealedMockAttributeAccess: mock.method1().attr2

----------
components: Library (Lib)
messages: 294961
nosy: Mario Corchero, haypo
priority: normal
severity: normal
status: open
title: Add restricted mocks to the python unittest mocking framework
type: enhancement
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30541>
_______________________________________


More information about the New-bugs-announce mailing list