Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有传递参数的python unittest-b_Python_Unit Testing_Python 3.6 - Fatal编程技术网

带有传递参数的python unittest-b

带有传递参数的python unittest-b,python,unit-testing,python-3.6,Python,Unit Testing,Python 3.6,快速总结:在python中使用接受cmd行参数的unittest并使用-b标志运行测试 我在一个名为:filetool.py的文件中有以下代码 def get_passedargdict(): '''need a place to setup args''' parser = argparse.ArgumentParser(description="pass me some data") parser.add_argument("-skipmd5", "--skipmd

快速总结:在python中使用接受cmd行参数的unittest并使用-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的文件中,它可以工作:

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时一切都会正常运行


有没有办法让这个接受参数的unittest同时使用-b选项而不会导致失败?谢谢大家!

看来我自己的帖子有点傻,所以我会自己回答的!这篇文章看起来有很多选择:

我使用make函数获取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
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