2017-10-09 64 views
0

快速摘要:越來越在Python這需要在CMD行參數工作單元測試和使用-b標誌運行測試蟒蛇單元測試與傳遞的參數-b


我在下面的代碼文件名爲:filetool.py

def get_passedargdict(): 
    '''need a place to setup args''' 
    parser = argparse.ArgumentParser(description="pass me some data") 
    parser.add_argument("-skipmd5", "--skipmd5", help="skip the md5 check", required=False) 
    parser.add_argument("-keepinput", "--keepinput", help="copy instead of moving the input file", required=False) 
    parser.add_argument("-keepconfig", "--keepconfig", help="copy instead of moving the config file", required=False) 
    passedargs = parser.parse_args() 
    passedargdict = {} 

    if passedargs.skipmd5 == "y": 
     passedargdict["skipmd5"] = True 
    else: 
     passedargdict["skipmd5"] = False 

    if passedargs.keepinput == "y": 
     passedargdict["keepinput"] = True 
    else: 
     passedargdict["keepinput"] = False 

    if passedargs.keepconfig == "y": 
     passedargdict["keepconfig"] = True 
    else: 
     passedargdict["keepconfig"] = False 

    return passedargdict 

非常直截了當,工作正常。我接收命令行內容並將其填入字典中。現在,我想補充一個非常基本的單元測試(我有很多已經被工作)使用:在一個名爲test_filetools.py

import unittest 

和這個作品:

def test_get_passedargdict(self): 
    passedargdict = get_passedargdict() 
    self.assertFalse(passedargdict["keepinput"]) 
    self.assertFalse(passedargdict["keepconfig"]) 
    self.assertFalse(passedargdict["skipmd5"]) 

而且我可以運行:

test_filetools.py 

它很好用。我熱愛生活。但是,我在這裏有很多的單元測試的,我不希望所有的屏幕,我只是想在小點的垃圾郵件,所以我嘗試:

test_filetools.py -b 

我也得到了失敗:

Stderr: 
usage: test_filetools.py [-h] [-skipmd5 SKIPMD5] [-keepinput KEEPINPUT] 
         [-keepconfig KEEPCONFIG] 
test_filetools.py: error: unrecognized arguments: -b 

所以它看起來像我的get_passedargdict()試圖拉入-b。 如果我把這個單元測試出來,它全部運行良好,用-b

任何想法,我可以有這個單元測試,需要參數,並能夠同時使用-b選項,而不會導致此失敗?謝謝!

回答

0

看起來像我自己的帖子是有點愚蠢,所以我會自己回答!這篇文章看起來有很多的選擇:

How do you write tests for the argparse portion of a python module?

我做的函數取ARGS去了,在真實代碼的命令行的東西傳遞給它,在測試硬編碼空。

這裏是我改變了我的測試:

def test_get_passedargdict(self): 
    passedargdict = get_passedargdict([]) 
    self.assertFalse(passedargdict["keepinput"]) 
    self.assertFalse(passedargdict["keepconfig"]) 
    self.assertFalse(passedargdict["skipmd5"]) 

和我的實際代碼是現在這個樣子:

passedargdict = get_passedargdict(sys.argv[1:]) 

和功能:

def get_passedargdict(args): 
    '''need a place to setup args''' 
    parser = argparse.ArgumentParser(description="pass me some data") 
    parser.add_argument("-skipmd5", "--skipmd5", help="skip the md5 check", required=False) 
    parser.add_argument("-keepinput", "--keepinput", help="copy instead of moving the input file", required=False) 
    parser.add_argument("-keepconfig", "--keepconfig", help="copy instead of moving the config file", required=False) 
    passedargs = parser.parse_args(args) 
    passedargdict = {} 

    if passedargs.skipmd5 == "y": 
     passedargdict["skipmd5"] = True 
    else: 
     passedargdict["skipmd5"] = False 

    if passedargs.keepinput == "y": 
     passedargdict["keepinput"] = True 
    else: 
     passedargdict["keepinput"] = False 

    if passedargs.keepconfig == "y": 
     passedargdict["keepconfig"] = True 
    else: 
     passedargdict["keepconfig"] = False 

    return passedargdict