簡體   English   中英

命令行參數的unittest

[英]unittest for command line arguments

如何對腳本中的命令行參數進行不正確的單元測試?

例如,

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

首先,您需要一個單元測試:

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 ,您應該在新代碼中使用argparse而不是optparse (已棄用了多年)。

OptionParser

從2.7版開始不推薦使用:optparse模塊不推薦使用,將不再進行開發。 argparse模塊將繼續開發。

您的問題無關,與unittest 無需assertnargs=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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM