If you decorate a class instance method as an
autouse=True pytest fixture, then it
will be automatically applied for all test methods on that class. This is a
useful pattern to remember.
For example, it can be employed to apply the same context management for all tests in the class. For example, if you wanted to patch Django’s settings for all test methods:
import pytest from django.test import override_settings from django.conf import settings class TestSomethingAboutTimezones: @pytest.fixture(autouse=True) def use_london_timezone(self): with override_settings(TIME_ZONE="Europe/London"): yield def test_something(self): # This will pass. assert settings.TIME_ZONE == "Europe/London" def test_something_else(self): # This will pass. assert settings.TIME_ZONE == "Europe/London"
You probably wouldn’t use it for mocking since the
already work on classes but there are use-cases where it would be helpful.
Docs on the
autouse option: https://docs.pytest.org/en/stable/fixture.html#autouse-fixtures-fixtures-you-don-t-have-to-request