亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修補參數化夾具內的功能?

如何修補參數化夾具內的功能?

精慕HU 2022-06-07 16:44:40
我想根據環境修補功能,因此考慮到我們有環境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 是您嘗試修補的函數將采用的參數


查看完整回答
反對 回復 2022-06-07
  • 1 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號