如何针对错误的命令行参数对我的脚本进行单元测试?
例如,
由于-t标志不存在,my_script.py -t
应该给出错误,如下面的代码所示:
parser = OptionParser()
parser.add_option("-d",
action="callback",
callback=get_bios_difference,
help="Check difference between two files"
)
(options, args) = parser.parse_args()
if len(sys.argv) == 1: # if only 1 argument, it's the script name
parser.print_help()
exit()
答案 0 :(得分:0)
首先,你需要一个单位来测试:
def parse_options(args=None):
# Duplicating the default behavior of OptionParser.parse_args
if args is None:
args = sys.argv[1:]
parser = OptionParser()
parser.add_option("-d",
action="callback",
callback=get_bios_difference,
help="Check difference between two files"
)
(options, args) = parser.parse_args(args)
if not args:
parser.print_help()
exit()
请注意,我们明确地将args
传递给parse_args
,而不是假设要解析sys.argv
。
在制作中,您可以拨打parse_options()
,它会像以前一样工作。对于测试,您可以调用parse_options([])
或parse_options(["-t"])
或您要测试的其他任何参数组合。
所有这一切,您应该在新代码中使用argparse
而不是optparse
(已被弃用多年)。
答案 1 :(得分:0)
OptionParser
自版本2.7以来不推荐使用:不推荐使用optparse模块,不会进一步开发;开发将继续使用argparse模块。
您的问题与unittest
无关? assert
不需要nargs=2
,--d
定义的2个项目。
argparse
会检查你的args数量,这里是parameter.py
import argparse
from pprint import pprint
def get_parser():
parser = argparse.ArgumentParser(description='example of argparse')
parser.add_argument('--d', type=str, nargs=2, help='2 files')
return parser
if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args(sys.argv[1:])
pprint(args)
使用2个文件运行:
parameter.py --d a b
Namespace(d=['a', 'b'])
使用1参数
运行时parameter.py --d a
parameter.py: error: argument --d: expected 2 argument(s)