Укажите настройки конфигурации для каждого теста - PullRequest
0 голосов
/ 19 октября 2019

Я управляю своей конфигурацией для приложения Python с помощью https://github.com/theskumar/python-dotenv и использую pytest для своих тестов.

Для определенного набора тестов я хочу настраиваемую конфигурацию, специфичную для каждого теста. Теперь я знаю https://github.com/quiqua/pytest-dotenv,, который дает мне возможность установить конфигурацию для каждой среды (prod / test), но я хочу более детальную детализацию для каждого теста. До сих пор я справлялся с этим, высмеивая объект Config, который содержит всю мою конфигурацию. Это грязно, потому что для каждого теста мне нужно смоделировать этот Config объект для каждого модуля, в который он загружен.

В идеале, у меня было бы что-то вроде этого:

def test_1(config):
    config.foo = 'bar'
    run_code_that_uses_config()

def test_2(config):
    config.foo = 'bleh'
    run_code_that_uses_config()

1 Ответ

0 голосов
/ 19 октября 2019

В итоге я использовал 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),, что усложняло обслуживание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...