新增于3.2版本
unittest支持简单的test discovery,为了适配test discovery,所有测试文件都必须是可以从项目的顶级目录导入的模块或包(包含命名空间包),这意味着所有文件名都必须是可以有效识别的。
Test Discovery可以在TestLoader.discover()中使用,也可以在命令行中使用。最基础的命令行用法:
cd project_directory
python -m unittest discovery
小提示:python -m unittest
相当于python -m unittest discovery
的简写,但在需要将参数传递给Test Discovery时,必须显式使用discovery子命令。
discovery子命令有下列选项:
-v,--verbose
详细输出
-s,--start-directory + directory
开始查找的目录,默认为.
-p,--pattern + pattern
模式匹配测试文件,默认为test*.py
-t,--top-level-directory + directory
项目的顶级目录,默认为启动目录
-s,-p,-t选项可以按顺序作为位置参数传入。以下两个命令行是等效的:
python -m unittest discovery -s project_directory -p "*_test.py"
python -m unittest discovery project_directory "*_test.py"
除了使用路径作为启动目录传递,还可以使用包名,如myproject.subpackage.test
。Test Discovery将会导入你提供的包名,并将它在文件系统上的位置用作启动目录。
注意:
Test Discovery是通过导入的方式加载测试。一旦Test Discovery找到了指定启动目录中的所有测试文件,它就会将路径转换为要导入的包名。举个例子:foo/bar/baz.py会被转换成foo.bar.baz。
如果你在全局安装了包,并在包的副本上尝试进行Test Discovery,那么导入可能使用了错误的位置。这种情况发生的时候,Test Discovery会警告并退出。
如果你提供的启动目录是包名,而不是目录的路径,则Test Discovery会假定它从中导入的位置是你想要的位置,你将不会收到警告。
测试模块和包可以通过load_tests协议自定义Test Discovery的加载和发现。
Test Discovery支持命名空间包(更新于3.4)