Я хотел бы исправить функцию в зависимости от среды, учитывая, что у нас есть окружение mode1
и mode2
.
. При коде ниже monkeypatch всегда вызывайте функцию, исправленную из mode1
Если я переключу порядок параметров mode2
и mode1
, он всегда будет вызывать функцию, исправленную с mode2
.
Но я бы хотел использовать функцию pacthed, зависящую от запрошенного параметра.
Я проверил с помощью отладчика условия проверки режима: mode1
и mode2
работает и установил правильную функцию.Но всегда она сохраняет первую исправленную функцию.
conftest.py
def pytest_generate_tests(metafunc):
if 'patch_fhs' in metafunc.fixturenames:
metafunc.parametrize('patch_fhs', ['mode1', 'mode2'], indirect=True, scope='session')
@pytest.fixture()
def parametrized_patch(request):
if request.param == 'mode1':
monkeypatch = MonkeyPatch()
import mymodule
def patched_func():
return 'patched_mode1'
monkeypatch.setattr(mymodule, 'my_func', patched_func)
elif if request.param == 'mode2':
monkeypatch = MonkeyPatch()
import mymodule
def patched_func():
return 'patched_mode2'
monkeypatch.setattr(mymodule, 'my_func', patched_func)
else:
raise ValueError('Unknown mode named: {name}'.format(name=request.param))
return request.param
test_parametrized_fixture.py
def test_foo(parametrized_patch):
from mymodule import my_func
print(parametrized_patch)
print(my_func)
Результат теста будет примерно таким:
-> test_foo
mode1
patched_mode1
-> test_foo
mode2
patched_mode1