我对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
...正如您所看到的,程序接受参数并打印它,但测试用例本身不会执行。我已经插入了一些打印件来显示执行情况以及什么不是。
我做错了什么? 提前致谢
ps。:我正在使用python 2.7.3
ps2.:测试运行正常(在将argparse添加到程序之前。)
答案 0 :(得分:2)
unittest.main()
本身parses command-line arguments,它无法理解/识别您的自定义参数(请参阅parseArgs()
类的TestProgram
方法)。
而是使用TextTestRunner
运行测试:
runner = unittest.TextTestRunner(verbosity=2)
result = runner.run(unittest.makeSuite(MyTestCase))
另见相关主题:
答案 1 :(得分:1)
您的问题是单元测试人员想要拥有任何命令行参数。开出自己的论点可能会让事情变得复杂。
从技术上讲,单元测试应该包含运行所需的一切,并且不应该依赖于参数。您可以考虑将任何与环境相关的配置(例如,数据库主机名)移动到环境变量。
我的两分钱。