pip*_*poo 8 python pytest argparse
我想用来pytest检查是否argparse.ArgumentTypeError为不正确的参数引发异常:
import argparse
import os
import pytest
def main(argsIn):
def configFile_validation(configFile):
if not os.path.exists(configFile):
msg = 'Configuration file "{}" not found!'.format(configFile)
raise argparse.ArgumentTypeError(msg)
return configFile
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--configFile', help='Path to configuration file', dest='configFile', required=True, type=configFile_validation)
args = parser.parse_args(argsIn)
def test_non_existing_config_file():
with pytest.raises(argparse.ArgumentTypeError):
main(['--configFile', 'non_existing_config_file.json'])
Run Code Online (Sandbox Code Playgroud)
但是, runningpytest说During handling of the above exception, another exception occurred:,因此测试失败。我究竟做错了什么?
问题是,如果参数的类型转换器引发异常ArgumentTypeError agrparse 退出,错误代码为 2,退出意味着引发内置异常SystemExit。因此,您必须捕获该异常并验证原始异常的类型是否正确:
def test_non_existing_config_file():
try:
main(['--configFile', 'non_existing_config_file.json'])
except SystemExit as e:
assert isinstance(e.__context__, argparse.ArgumentError)
else:
raise ValueError("Exception not raised")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |