Python unittest模块命令行参数没有main

时间:2014-02-28 20:56:22

标签: python python-2.7 argparse python-unittest

我正在尝试将命令行参数传递给我的单元测试。但是,我没有使用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__'

1 个答案:

答案 0 :(得分: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 doc进一步描述了这些内容。所以unittest需要一些选项(甚至一个子命令discover)。但我没有看到将选项传递到您自己的模块的方法的证据。

更多地使用-m unittest,显然unittest会尝试解析任何options(例如-z)。而其他所有内容(例如arg1)都是要测试的模块列表的一部分。