[英]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
? 無需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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.