发觉式测试
Version3.2 新增:
Unittest支持简单的发觉式测试。为了与发觉式测试兼容,所有测试文件都必须是可从项目顶级目录导入的模块或包(包括namespace packages)(因此,它们的文件名必须是有效的标识符)。
Test Discovery(发觉式测试) 的作用是:假设你的项目文件夹里面四散分布着很多个测试文件。当你做回归测试的时候,一个一个地执行这些测试文件就太麻烦了。TestLoader.discover() 提供了一个可以在项目目录下自动搜索并运行测试文件的功能,并可以直接从命令行调用。
发觉式测试是在TestLoader.discover()中实现的,也可以从命令行中使用。基本的命令行用法是:
cd project_directory
python -m unittest discover
注意:作为一种快捷方式,python -m unittest与python -m unittest discover是等价的。如果要通过参数使用发觉式测试,必须显式地使用discover子命令。
发觉式测试的附属命令如下:
-v,—verbose
详细输出
-s,—start-directory 目录
发觉式测试的目录(.默认)
-p,—pattern 模式
匹配测试文件的模式(test*.py 默认)
-t,—top-level-directory 目录
项目的顶级目录(默认是项目的根目录)
命令-s,-p,-t 可以作为参数在命令行中执行。一下两行命令是等价的:
python -m unittest discover -s project_directory -p "*_test.py"
python -m unittest discover project_directory "*_test.py"
除了作为路径之外,还可以传递包名,例如,myproject.subpackage.test,作为开始目录。然后将导入您提供的包名,并将其在文件系统上的位置用作开始目录。
注意:
发觉式测试通过导入测试来加载她们。一旦发觉式测试发现您指定的开始目录中的所有测试文件,它就会将路径转换为要导入的包名。例如foo/bar/baz.py将作为foo.bar.baz导入。
如果你在全局范围内安装了一个包,并尝试在包的另一个副本上运行发觉式测试,那么可能导入错误位置的包。如果发生这种情况,发觉式测试将警告你并退出。
如果你将开始目录作为包名而不是目录路径,那么发觉式测试会假设它从开始目录导入的就是你想要的,因此不会收到警告。
测试模块和包可以通过load_tests协议自定义测试加载和发觉。
Version 3.4中更改:发觉式测试支持 namespace packages。