argparse错误:选项无法识别

时间:2014-05-08 20:58:14

标签: python unit-testing python-2.7 testing argparse

我对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添加到程序之前。)

2 个答案:

答案 0 :(得分:2)

unittest.main()本身parses command-line arguments,它无法理解/识别您的自定义参数(请参阅parseArgs()类的TestProgram方法)。

而是使用TextTestRunner运行测试:

runner = unittest.TextTestRunner(verbosity=2)
result = runner.run(unittest.makeSuite(MyTestCase))

另见相关主题:

答案 1 :(得分:1)

您的问题是单元测试人员想要拥有任何命令行参数。开出自己的论点可能会让事情变得复杂。

从技术上讲,单元测试应该包含运行所需的一切,并且不应该依赖于参数。您可以考虑将任何与环境相关的配置(例如,数据库主机名)移动到环境变量。

我的两分钱。