【问题标题】:Python unittest module command line arguments without main没有main的Python unittest模块命令行参数
【发布时间】:2014-04-02 01:42:22
【问题描述】:

我正在尝试将命令行参数传递给我的单元测试。但是,我没有使用if __name__ == '__main__' 块,因为所有内容都打包为相对路径。所以调用python path/to/test.py会抛出这个错误:

from .setup import Utilities
ValueError: Attempted relative import in non-package

我将测试称为:python -m unittest test_file.test_name。这以setUpModule() 函数启动。但是,似乎命令行解析发生在单元测试库中某处的该函数之前,因此传入任何不是模块的东西都会引发错误。这样做:python -m unittest test_file.test_name arg1 抛出:ImportError: No module named arg1

有什么办法可以解决这个问题,而不必使用if __name__ == '__main__'

【问题讨论】:

    标签: python python-2.7 argparse python-unittest


    【解决方案1】:

    unittest寻求帮助会得到以下信息

    $ ../python3 -m unittest -h
    Usage: python3 -m unittest [options]
    
    Options:
      -h, --help      show this help message and exit
      -v, --verbose   Verbose output
      -q, --quiet     Quiet output
      -f, --failfast  Stop on first fail or error
      -c, --catch     Catch ctrl-C and display results so far
      -b, --buffer    Buffer stdout and stderr during tests
    

    unittest 文档进一步描述了这些。所以unittest 有一些选项(甚至还有一个子命令discover)。但是我没有看到将选项传递给您自己的模块的方法的证据。

    再玩一下-m unittest,很明显unittest 试图解析任何options(例如-z)。像您的 arg1 这样的其他所有内容都是要测试的模块列表的一部分。

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多