2017-10-09 65 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