3.2 版中的新功能。
Unittest 支持簡單的測試發(fā)現(xiàn)。為了與測試發(fā)現(xiàn)兼容,所有測試文件都必須是從項目的頂級目錄導入的模塊或包(包括命名空間包)(這意味著它們的文件名必須是有效的標識符)。
測試發(fā)現(xiàn),簡單的說就是unittest支持自動匹配測試用例,這個掃描項目中的測試用例的過程就叫測試發(fā)現(xiàn)。
測試發(fā)現(xiàn)在 TestLoader.discover() 中實現(xiàn),但也可以從命令行使用?;镜拿钚杏梅ㄊ牵?/p>
cd project_directory
python -m unittest discover
注意:
作為快捷方式,?python -m unittest
?等效于?python -m unittest discover
?。如果您想將參數(shù)傳遞給測試發(fā)現(xiàn),則必須顯式使用 ?discover
?子命令。
?discover
?子命令具有以下選項:
-s、-p 和 -t 選項可以作為位置參數(shù)按該順序傳入。以下兩個命令行是等效的:
python -m unittest discover -s project_directory -p "*_test.py"
python -m unittest discover project_directory "*_test.py"
除了作為路徑之外,還可以傳遞包名稱,例如?myproject.subpackage.test
?,作為起始目錄。然后,將導入您提供的軟件包名稱,并將其在文件系統(tǒng)上的位置用作起始目錄。
警告
測試發(fā)現(xiàn)通過導入測試來加載測試。一旦測試發(fā)現(xiàn)從您指定的 start 目錄中找到所有測試文件,它就會將路徑轉(zhuǎn)換為要導入的包名稱。例如foo/bar/baz.py
將導入為foo.bar.baz
。
如果全局安裝了包,并嘗試在包的其他副本上進行測試發(fā)現(xiàn),則導入可能在錯誤的位置發(fā)生。如果發(fā)生這種情況,測試發(fā)現(xiàn)將警告您并退出。
如果將起始目錄作為包名稱而不是目錄的路徑提供,則 discover 會假定它從哪個位置導入是預期的位置,因此不會收到警告。
測試模塊和包可以通過load_tests協(xié)議自定義測試加載和發(fā)現(xiàn)。
版本 3.4 的更改: 測試發(fā)現(xiàn)支持起始目錄的命名空間包。請注意,您還需要指定頂級目錄(例如 ?
python -m unittest discover -s root/namespace -t root
?)
更多建議: