我想在pytest
中使用动态添加的CLI参数(即
class TestHyperML:
def some_test(self):
# Setup some CLI argument such as --some_arg 3 -- some_other_arg 12
my_class = SomeClass()
class SomeClass:
def parse_cli_arguments(self):
# here I want to fetch my arguments in sys.argv.
parameters = {}
name = None
for x in sys.argv[1:]:
if name:
parameters[name] = {'default': ast.literal_eval(x)}
name = None
elif x.startswith('-'):
name = x.lstrip('-')
return parameters
我知道可以通过运行pytest test_something.py --somearg
以编程方式执行此操作,但是我想从测试内部以编程方式执行该操作。
有可能吗?谢谢!
答案 0 :(得分:0)
感谢上面发布的答案以及类似的SO问题,这是我使用的解决方案:
import mock
def test_parsing_cli_arguments(self):
args = 'main.py --my_param 1e-07 --my_other_param 2'.split()
with mock.patch('sys.argv', args):
parser = ConfigParser("config.yaml")
# Inside parser, sys.argv will contain the arguments set here.