В итоге я использовал monkeypatch
и применил следующий подход:
from my_library.settings import Config
@pytest.fixture
def config(monkeypatch):
monkeypatch.setattr(Config, 'foo', 'bar')
return Config
def test_1(config, monkeypatch):
monkeypatch.setattr(config, 'foo', 'some value specific to this test')
run_code_that_uses_config()
С помощью monkeypatch
мне удалось передать объект Config
через прибор pytest для создания значения по умолчанию и переопределенияэто для каждого теста. Код, который использует конфигурацию, смог получить изменения. Раньше я использовал patch
из стандартной библиотеки mock
, но мне приходилось исправлять каждое место, где просматривался конфиг (https://docs.python.org/3/library/unittest.mock.html#where-to-patch),, что усложняло обслуживание.