我有一个关于argparse的问题。下面是我的部分代码:
(...)
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-g', '--gfirst', dest="a", type=int, required=True)
args = parser.parse_args()
print args.a #Testing
print args.a #Testing
if __name__ == '__main__':
main()
print "3"
unittest.main(verbosity=2)
print "4"
(...)
我试图将'a'设置为执行测试用例所需的值,因为我将来会需要这个值。然而…
$ python regular_test.py --gfirst 2
2
2
3
option --gfirst not recognized
Usage: regular-test.py [options] [test] [...]
Options:
-h, --help Show this message
-v, --verbose Verbose output
-q, --quiet Minimal output
-f, --failfast Stop on first failure
-c, --catch Catch control-C and display results
-b, --buffer Buffer stdout and stderr during test runs
…正如您所看到的,程序接受参数并输出它,但是测试用例本身没有执行。我插入了一些图片来显示哪些可以执行,哪些不能执行。
我做错了什么?提前感谢
p。:我正在使用python 2.7.3
ps2。:测试正常运行(在向程序添加argparse之前)
unittest.main()
本身解析命令行参数,它不能理解/识别您自定义的参数(参见TestProgram
类的parseArgs()
方法)。
相反,使用TextTestRunner
运行测试:
runner = unittest.TextTestRunner(verbosity=2)
result = runner.run(unittest.makeSuite(MyTestCase))
参见相关线程:
- argparse和unittest python
- 从另一个脚本调用python unittest并导出所有错误消息
您的问题是单元测试人员想要拥有任何命令行参数。这可能会让你提出自己的观点变得复杂。
从技术上讲,单元测试应该包含运行所需的所有内容,不应该依赖于参数。您可以考虑将任何与环境相关的配置(例如,DB主机名)移到环境变量中。
我的两分钱