-
-
Notifications
You must be signed in to change notification settings - Fork 150
Description
Not sure if there exists a different way to achieve what I want, but I use create_autospec extensively and ran into a case where I need to be able to reset it between the tests. I can do this manually, but then I ran into this plugin and noticed resetall, but it turned out that mocks created with create_autospec are not taken into account by resetall.
Consider the following example:
@pytest.fixture(scope="session")
def service_mock():
...
@pytest.fixture(scope="session")
def expensive_to_construct_fixture(service_mock):
...I want to avoid creating the expensive fixture on each test run, so I use session scope, but it depends on other mocks which I need to be able to configure and assert in my tests, but then I have to reset them manually.
I would rather create function scope autouse fixture, that would reset all the mocks:
@pytest.fixture(autouse=True)
def reset_all_mocks(session_mocker) -> None:
session_mocker.resetall()But unfortunately mocks created with create_autospec are not added to the _patches_and_mocks and thus I cannot use resetall.
Would this be ok to add support for create_autospec? It seems to be pretty straightforward to add it - pretty much something like this would work, but maybe you have some other considerations?
def create_autospec(self, *args, **kwargs):
m = self.mock_module.create_autospec(*args, **kwargs)
self._patches_and_mocks.append((None, m))
return m