unittest 测试发现
3.2 版中的新功能。
Unittest 支持简单的测试发现。为了与测试发现兼容,所有测试文件都必须是从项目的顶级目录导入的模块或包(包括命名空间包)(这意味着它们的文件名必须是有效的标识符)。
测试发现,简单的说就是unittest支持自动匹配测试用例,这个扫描项目中的测试用例的过程就叫测试发现。
测试发现在 TestLoader.discover() 中实现,但也可以从命令行使用。基本的命令行用法是:
cd project_directory
python -m unittest discover
注意:
作为快捷方式,python -m unittest
等效于python -m unittest discover
。如果您想将参数传递给测试发现,则必须显式使用 discover
子命令。
discover
子命令具有以下选项:
-s、-p 和 -t 选项可以作为位置参数按该顺序传入。以下两个命令行是等效的:
python -m unittest discover -s project_directory -p "*_test.py"
python -m unittest discover project_directory "*_test.py"
除了作为路径之外,还可以传递包名称,例如myproject.subpackage.test
,作为起始目录。然后,将导入您提供的软件包名称,并将其在文件系统上的位置用作起始目录。
警告
测试发现通过导入测试来加载测试。一旦测试发现从您指定的 start 目录中找到所有测试文件,它就会将路径转换为要导入的包名称。例如foo/bar/baz.py
将导入为foo.bar.baz
。
如果全局安装了包,并尝试在包的其他副本上进行测试发现,则导入可能在错误的位置发生。如果发生这种情况,测试发现将警告您并退出。
如果将起始目录作为包名称而不是目录的路径提供,则 discover 会假定它从哪个位置导入是预期的位置,因此不会收到警告。
测试模块和包可以通过load_tests协议自定义测试加载和发现。
版本 3.4 的更改: 测试发现支持起始目录的命名空间包。请注意,您还需要指定顶级目录(例如
python -m unittest discover -s root/namespace -t root
)
更多建议: