2

如何对我的脚本进行单元测试以查找不正确的命令行参数?

例如,

我的脚本.py -t

应该给出一个错误,因为 -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()
4

2 回答 2

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()

请注意,我们显式传递argsparse_args,而不是让它假设sys.argv要被解析。

在生产中,你可以打电话parse_options(),它会像以前一样工作。对于测试,您可以调用parse_options([])orparse_options(["-t"])或您想要测试的任何其他参数组合。


话虽如此,您应该在新代码中使用argparse而不是optparse(已被弃用多年)。

于 2018-03-21T22:36:08.203 回答
0

选项解析器

2.7 版后已弃用: optparse 模块已弃用,不会进一步开发;argparse 模块将继续开发。

与你的问题无关unittest?没有必要assertnargs=2定义的2项需要--d

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)
于 2018-03-22T00:21:49.477 回答