我想根據環境修補功能,因此考慮到我們有環境mode1和mode2.使用monkeypatch調用下面的代碼總是修補的函數mode1如果我切換參數順序 mode2,mode1它將始終調用從mode2.但我想使用請求參數的函數 pacthed 。我使用調試器檢查了檢查模式的條件:mode1并按mode2預期工作并設置了正確的功能。但它總是會修補第一個功能。conftest.pydef 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.paramtest_parametrized_fixture.pydef test_foo(parametrized_patch): from mymodule import my_func print(parametrized_patch) print(my_func)測試輸出將類似于-> test_foomode1patched_mode1-> test_foomode2patched_mode1
1 回答

紅糖糍粑
TA貢獻1815條經驗 獲得超6個贊
嘗試這個:
@pytest.fixture(params=your_params)
def parametrized_patch(monkeypatch, request):
monkey patch.setattr(
your_module,
'your_func',
lambda x, y, z: request.param
)
x, y, z 是您嘗試修補的函數將采用的參數
添加回答
舉報
0/150
提交
取消