我正在尝试将命令行参数传递给我的单元测试。但是,我没有使用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__'
?
向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
)都是要测试的模块列表的一部分。