在VS Code中對Python進行單元測試
Python擴充套件支援使用Python的內建unittest框架以及pytest和Nose進行單元測試。要使用pytest和Nose,必須將它們安裝到當前的Python環境中(即,在pythonPath
設定中標識的環境,請參閱環境)。
使用Python:Discover Unit Tests根據當前所選測試框架的發現模式掃描專案以進行測試(請參閱測試發現。一旦發現,VS Code提供了多種執行測試的方法(請參閱執行測試)。
單元測試輸出顯示在Python Test Log面板中,包括未安裝測試框架時導致的錯誤。
提示:一個包含各種單元測試的有用儲存庫,應用於不同的排序演算法,是https://github.com/gwtw/py-sorting。
啟用和配置測試框架
預設情況下禁用單元測試。要啟用單元測試,請將以下設定之一設定為true:
"python.unitTest.unittestEnabled": false,
"python.unitTest.pyTestEnabled": true,
"python.unitTest.nosetestsEnabled": false,
注意:一次只啟用一個測試框架。
上面的示例啟用了pytest,使unittest和Nose禁用。
每個框架還具有特定的配置設定,如以下部分所述:
Unittest配置設定
設定 (python.unitTest。) |
預設 | 描述 |
---|---|---|
unittestEnabled | false |
指定是否為單元測試啟用UnitTest。 |
unittestArgs | ["-v", "-s", ".", "-p", "*test*.py"] |
傳遞給unittest的引數,其中由空格分隔的每個元素是列表中的單獨項。有關預設值的說明,請參見下文。 |
CWD | 空值 | 指定單元測試的可選工作目錄。 |
outputWindow | "Python Test Log" |
用於單元測試輸出的視窗。 |
promptToConfigure | true |
指定VS程式碼是否在發現潛在測試時提示配置測試框架。 |
DEBUGPORT | 3000 |
用於除錯UnitTest測試的埠號。 |
autoTestDiscoverOnSaveEnabled | true |
指定在儲存單元測試檔案時是啟用還是禁用自動執行測試發現。 |
UnitTest的預設引數如下:
-v
設定預設詳細程度。刪除此引數以獲得更簡單的輸出。-s .
指定用於發現測試的起始目錄。如果您在“test”資料夾中進行了測試,則可以將其更改為-s test
("-s", "test"
在arguments陣列中)。-p *test*.py
是用於查詢測試的發現模式。在這種情況下,它.py
是包含單詞“test” 的任何檔案。如果以不同的方式命名測試檔案,例如在每個檔名後附加“_test”,則使用類似於*_test.py
陣列的相應引數的模式。
要在第一次失敗時停止測試運行,請將fail fast選項新增"-f"
到arguments陣列中。
有關完整的可用選項集,請參閱unittest命令列介面。
Pytest配置設定
設定 (python.unitTest。) |
預設 | 描述 |
---|---|---|
pyTestEnabled | false |
指定是否為單元測試啟用PyTest。 |
pyTestPath | "py.test" |
PyTest的路徑。如果PyTest位於當前環境之外,請使用完整路徑。 |
pyTestArgs | [] |
傳遞給PyTest的引數,其中由空格分隔的每個元素都是列表中的單獨項。請參閱PyTest命令列選項。 |
您還可以使用PyTest Configuration中pytest.ini
所述的檔案配置pytest 。
注意 如果安裝了pytest-cov coverage模組,則VS Code在除錯時不會在斷點處停止,因為pytest-cov使用相同的技術來訪問正在執行的原始碼。要防止此行為,請
--no-cov
在pyTestArgs
除錯測試時包括。(有關更多資訊,請參閱pytest-cov文件中的Debuggers和PyCharm。)
鼻子配置設定
設定 (python.unitTest。) |
預設 | 描述 |
---|---|---|
nosetestsEnabled | false |
指定是否為單元測試啟用Nose。 |
nosetestPath | "nosetests" |
鼻子的路徑。如果Nose位於當前環境之外,請使用完整路徑。 |
nosetestArgs | [] |
傳遞給Nose的引數,其中由空格分隔的每個元素都是列表中的單獨項。請參閱鼻子使用選項。 |
您還可以使用Nose配置中所述的.noserc
或nose.cfg
檔案配置nose 。
測試發現
VS Code使用當前啟用的單元測試框架來發現測試。您可以使用Python:Discover Unit Tests命令隨時觸發測試發現。使用Unittest,您可以將 python.unittest.autoTestDiscoverOnSaveEnabled
設定設定為true
在儲存測試檔案時執行測試發現。
測試發現應用當前測試框架的arguments選項中指定的發現模式。例如,unittest的預設引數包括-s . -p *test*.py
,意味著unittest以專案資料夾(-s .
)開頭遞迴查詢名稱與*test*.py
pattern(-p *test*.py
)匹配的所有檔案。您可以在之後指定不同的起始資料夾-s
,和/或之後指定其他模式-p
。
Pytest,它的一部分,具有用於確定其根資料夾和圖案,如在所描述的演算法pytest配置。
對於nose,使用-w=<folder>
和-m=<regex>
開關指定模式匹配的起始資料夾和正則表示式(請參閱Nose選項)。
提示:有時不會發現放置在子資料夾中的單元測試,因為無法匯入此類測試檔案。要使它們可匯入,請嘗試放置
__init__.py
在該資料夾中命名的空檔案。
執行測試
使用以下任何操作執行測試:
選擇
Run Tests
狀態列,然後選擇一個像這樣的命令Run All Tests
或Run Failed Unit Tests
。在資源管理器中右鍵單擊檔案並選擇
Run Unit Tests
,該檔案在該檔案中執行測試。開啟測試檔案,然後選擇
Run Test
出現在測試類或方法上方的程式碼鏡頭。此命令僅執行類中的那些測試或分別執行該測試方法。從命令選項板中,選擇任何單元測試命令:
命令 | 描述 |
---|---|
執行所有單元測試 | 在工作區及其子資料夾中搜索並執行所有單元測試。 |
運行當前單元測試檔案 | 在當前在編輯器中檢視的檔案中執行測試。 |
執行失敗的單元測試 | 重新執行先前測試執行中失敗的任何測試。如果尚未執行任何測試,則執行所有測試。 |
執行單元測試檔案... | 提示輸入特定的測試檔名,然後在該檔案中執行測試。 |
執行單元測試方法...... | 提示要執行的測試名稱,為測試名稱提供自動完成功能。 |
顯示單元測試輸出 | 開啟Python Test Log面板,其中包含有關傳遞和失敗測試以及錯誤和跳過測試的資訊。 |
除錯測試
因為單元測試本身就是原始碼,所以它們很容易出現程式碼缺陷,就像它們測試的生產程式碼一樣。因此,您可能偶爾需要在偵錯程式中單步執行單元測試。
在Python的:除錯所有測試和Python的:除錯單元測試方法...命令(在命令面板和狀態列選單)分別啟動偵錯程式的所有測試和單一的測試方法。