提问人:jjk 提问时间:7/31/2022 更新时间:9/9/2023 访问量:709
如何对 monkeypatch 多个 argv 参数进行 pytest?
How to pytest monkeypatch multiple argv arguments?
问:
我只能测试一个参数,例如动物。所有其他添加的参数都失败,例如名称。我必须更改什么?
pytest foo.py
返回pytest: error: the following arguments are required: name
### foo.py ###
import argparse
import pytest
import sys
@pytest.mark.parametrize('animal_input', ['cat'])
@pytest.mark.parametrize('name_input', ['tom'])
def test_get_bake_progress(monkeypatch, animal_input, name_input):
with monkeypatch.context() as m:
m.setattr(sys, 'argv', ['--animal', animal_input])
m.setattr(sys, 'argv', ['--name', name_input])
assert foo() == (animal_input)
def foo():
parser = argparse.ArgumentParser()
parser.add_argument('animal')
parser.add_argument('name')
args = parser.parse_args()
animal = args.animal
name = args.name
return animal
答:
1赞
Constantin Hong
5/12/2023
#1
根据 @MrBean Bremen 的说法,并进行了 @Ouss 的一个小编辑:
m.setattr(sys, 'argv', [ sys.argv[0], '--animal', animal_input, '--name', name_input])
固定代码
### foo.py ###
import argparse
import pytest
import sys
@pytest.mark.parametrize('animal_input', ['cat'])
@pytest.mark.parametrize('name_input', ['tom'])
def test_get_bake_progress(monkeypatch, animal_input, name_input):
with monkeypatch.context() as m:
m.setattr(sys, 'argv', [ sys.argv[0], '--animal', animal_input, '--name', name_input])
assert foo() == (animal_input)
def foo():
parser = argparse.ArgumentParser()
parser.add_argument('animal')
parser.add_argument('name')
args = parser.parse_args()
animal = args.animal
name = args.name
return animal
评论
sys.argv
setattr
setattr