我需要确保在给定以下条件的情况下使用pytest引发错误:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-x', required=True)
parser.parse_args()
调用时不将某些内容传递给-x
标志,将导致:
usage: my_script.py [-h] -x X
my_script.py: error: the following arguments are required: -x
如果我故意试图创建一个模棱两可的类型错误,我可能无法想出更好的错误。我需要指定一些要检查的错误类型,如下所示:
with pytest.raises(SomeError):
test_condition()
即使在try
和except
块中包装东西也不起作用,到目前为止,我尝试了KeyError
、ValueError
、SystemError
、SystemExit
、argparse.ArgumentError
、KeyError
、Exception
。。。似乎什么都不起作用。
默认情况下,argparse不会抛出异常,但会在发生错误时退出。自python 3.9以来,有一个exit_on_error
参数,但它只在类型检查失败时引发异常。它仍然以未知的参数退出。
不改变程序行为的更好方法是检查对sys.exit
:的调用
>>> import argparse, mock
>>> parser = argparse.ArgumentParser()
>>> with mock.patch("sys.exit") as m:
... parser.parse_args(("bad", "argument"))
... print("sys.exit call count: %d" % m.call_count)
...
usage: [-h]
: error: unrecognized arguments: bad argument
Namespace()
sys.exit call count: 1