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