Python 单元测试带传递参数 -b

2024-04-23 07:39:31 发布

您现在位置:Python中文网/ 问答频道 /正文

快速摘要:让python中的unittest工作,它接受cmd行参数,并使用-b标志来运行测试


我在一个名为文件工具.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

很直接,很好用。我接收命令行的内容并将其放入字典中。现在,我想添加一个非常基本的单元测试(我已经有很多单元测试正在运行),使用:

^{pr2}$

在一个名为test的文件中_文件工具.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选项而不会导致失败吗?谢谢您!在


Tags: 文件pytestselfaddfalseparserget
1条回答
网友
1楼 · 发布于 2024-04-23 07:39:31

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

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

我使用make函数获取参数,在实际代码中,将命令行的内容传递给它,在测试硬代码中它是空的。在

以下是我为考试所做的改变:

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

我现在的实际代码是这样的:

^{pr2}$

以及功能:

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

相关问题 更多 >