在 Visual Studio 中使用測試總管來寫入 Python 的單元測試

單元測試是測試應用程式中其他程式碼單元 (通常是隔離的函數、類別等) 的程式碼片段。 應用程式通過所有單元測試之後,您至少可以確定低階程式功能皆能正確運作。

在設計程式時,Python 會廣泛地使用單元測試來驗證案例。 Visual Studio 中的 Python 支援包含在開發程序的內容內針對單元測試進行探索、執行及偵錯,而且不需要個別執行測試。

本文章提供搭配 Python 的 Visual Studio 中的單元測試功能簡介。 如需單元測試的整體詳細資訊,請參閱對程式碼進行單元測試

必要條件

不支援 Visual Studio for Mac。 如需詳細資訊,請參閱 Visual Studio for Mac 發生什麼事? Windows、Mac 和 Linux 上的 Visual Studio Code 可透過可用的延伸模組與 Python 搭配運作。

選取 Python 專案的測試架構

Visual Studio 支援兩個適用於 Python、unittestpytest 的測試架構 (在 Visual Studio 2019 16.3 版及更新版本中可用)。 根據預設,當您建立 Python 專案時,不會選取任何架構。

請遵循下列步驟來選取 Python 專案的測試架構:

  1. 方案總管中,以滑鼠右鍵按一下專案名稱,然後選取 [屬性]

  2. 在專案 [屬性] 窗格中,選取 [測試] 索引標籤,然後選擇您的 [測試架構] 類型:

    • 針對 unittest 架構,Visual Studio 會為測試探索指派專案的根目錄。 預設值為 .,但您可以在配置專案設定時指定不同的位置。 也可以為測試檔案名 Pattern 指定一個或多個字串,例如 test*.py, test_*.py

    • 針對 pytest 架構,透過使用標準 pytest .ini 設定檔來指定諸如測試位置和檔案名稱模式等測試選項。 根據預設,工作區/專案資料夾會用於位置。 預設檔案名稱模式包括 test_*py*_test.py。 如需詳細資訊,請參閱 pytest 參考文件

    注意

    當您定義檔案名稱模式時,請記住底線 (_) 等特殊字元與萬用字元 (*) 不相符。 如果您要在檔案名稱中使用特殊字元,請在模式定義中指定這些字元,例如 test_*.py

  3. 若要儲存架構選取和設定,可以使用 Ctrl+S 鍵盤快速鍵。

設定架構之後,Visual Studio 會啟動測試探索,並開啟 [測試總管]。

在沒有專案的情況下設定 Python 的測試

Visual Studio 可讓您使用 Python 程式碼開啟資料夾,以在沒有專案的情況下執行及測試現有的 Python 程式碼。 在這種情況下,您必須使用 PythonSettings.json 檔案來設定測試。

  1. 使用 [開啟本機資料夾] 選項開啟現有的 Python 程式碼:

    顯示如何在 Visual Studio 2022 啟動時選取 [開啟本機資料夾] 選項的螢幕擷取畫面。

    顯示如何在 Visual Studio 啟動時選取 [開啟本機資料夾] 選項的螢幕擷取畫面。

  2. 開啟 Python 資料夾時,Visual Studio 會建立數個隱藏的資料夾,用於管理專案的相關設定。 若要在 [方案總管] 中查看這些資料夾 (以及任何其他隱藏的檔案和資料夾,例如 .git 資料夾),請選取 [顯示所有檔案] 選項:

    顯示如何在 Visual Studio 2022 的方案總管中檢視隱藏資料夾及檔案的螢幕擷取畫面。

    顯示如何在 Visual Studio 的方案總管中檢視隱藏資料夾及檔案的螢幕擷取畫面。

  3. 在 [方案總管] 中,展開 [本機設定] 資料夾,然後按兩下 PythonSettings.json 檔案,在編輯器中開啟檔案。

    注意

    大部分的組態顯示兩個設定檔案:PythonSettings.jsonProjectSettings.json。 在此練習中,您需要修改 PythonSettings.json 檔案。

    如果您沒有在 [本機設定] 資料夾中看到 PythonSettings.json 檔案,請手動建立它:

    1. 以滑鼠右鍵按一下 [本機設定] 資料夾,然後選取 [新增]>[新增檔案]。

    2. 將檔案命名為 PythonSettings.json,然後選取 Enter 以儲存變更。

    Visual Studio 會自動在編輯器中開啟新檔案。

  4. PythonSettings.json 檔案中,新增下列程式碼來定義 TestFramework。 視您所需的測試架構而定,將架構值設定為 pytestunittest

    {
      "TestFramework": "unittest",
      "UnitTestRootDirectory": "testing",
      "UnitTestPattern": "test_*.py"
    }
    
    • 針對 unittest 架構,如果您未在 PythonSettings.json 檔案中定義 UnitTestRootDirectoryUnitTestPattern 設定的特定值,Visual Studio 會分別使用 .test*.py 的預設值來新增這些欄位。

    • 針對 pytest 架構,設定選項總是在 pytest .ini 設定檔中指定,而不是透過 Visual Studio 設定指定。

  5. 如果您的 Python 程式包含 src 資料夾,它獨立於包含測試的資料夾,請使用 PythonSettings.json 檔案中的 SearchPaths 設定來指定 src 資料夾的路徑:

      "SearchPaths": [".\\src"]
    
  6. 將您的變更儲存到 PythonSettings.json 檔案。

設定架構之後,Visual Studio 會啟動指定架構的測試探索。 您可以在 [測試總管] 中存取測試。

新增和探索測試

根據預設,Visual Studio 會將 unittestpytest 測試識別為名稱開頭為 test 的方法。

若要查看 Visual Studio 如何啟動測試探索,請遵循下列步驟:

  1. 在 Visual Studio 中開啟 Python 專案

  2. 設定專案的測試架構屬性,如選取 Python 專案的測試架構中所述。

  3. 在 [方案總管] 中,以滑鼠右鍵按一下專案,然後選取 [新增]>[新項目]

    1. 在 [新增項目] 對話方塊中,選取 [Python 單元測試] 檔案類型。

    2. 輸入符合您為專案屬性所指定之模式定義的檔案名。

    3. 選取 [新增]。

  4. Visual Studio 會使用預設程式碼建立測試檔案:

    import unittest
    
    class Test_test1(unittest.TestCase):
        def test_A(self):
            self.fail("Not implemented")
    
    if __name__ == '__main__':
        unittest.main()
    

    此程式碼會匯入標準 unittest 模組,並從 unittest.TestCase 方法中衍生測試類別。 當您直接執行指令碼時,此程式碼也會叫用 unittest.main() 函數。

當您新增測試檔案時,Visual Studio 會在 [測試總管] 中提供它們。

使用 [測試總管] 檢視測試

設定測試架構和測試檔案之後,Visual Studio 會搜尋測試,並在 [測試總管] 中顯示它們。

以下是您可以使用 [測試總管] 的一些方式:

  • 選取 [測試]>[測試總管],以開啟 [測試總管]。

  • 開啟 [測試總管] 視窗時,請使用鍵盤快速鍵 CTRL+RA 來觸發測試探索。

  • 按兩下 [測試總管] 中的測試,在編輯器中開啟對應的來源檔案:

    螢幕擷取畫面顯示了 Visual Studio 2022 測試總管中測試的預設檢視。

    螢幕擷取畫面顯示了測試總管中測試的預設檢視。

  • 使用工具列上的 [分組依據] 選項來組織測試的檢視:

    螢幕擷取畫面顯示如何在 Visual Studio 2022 中使用 [分組依據] 選項來組織測試總管中的測試檢視。

    螢幕擷取畫面顯示如何使用 [分組依據] 選項來組織測試總管中的測試檢視。

  • 可以在 [搜尋] 欄位中輸入文字,依據名稱來篩選測試:

    螢幕擷取畫面顯示如何使用 [搜尋] 字段,在 [測試總管] 中篩選測試檢視。

    螢幕擷取畫面顯示如何使用 [搜尋] 字段,在 [測試總管] 中篩選測試檢視。

  • 執行測試並檢視測試執行狀態,如下一節所述。

如需 unittest 模組和撰寫測試的詳細資訊,請參閱 Python 文件

使用 [測試總管] 執行測試

在 [測試總管] 中,可使用多種方式來執行測試:

  • 選取 [全部執行 (檢視中的測試)],根據您的篩選設定來執行目前檢視中顯示的所有測試。
  • 使用 [執行] 功能表中的命令,將已失敗、已通過或未執行的測試作為一個群組來執行。
  • 選取一個或多個測試,以滑鼠右鍵按一下,然後選取 [執行選取的測試] 選項

Visual Studio 會在後台執行測試。 [測試總管] 會在每個測試完成時更新其狀態:

  • 通過的測試會顯示綠色的打勾圖示,以及完成測試回合所花費的時間:

    螢幕擷取畫面顯示了 Visual Studio 2022 測試總管中已通過的測試的狀態。

    螢幕擷取畫面顯示了測試總管中已通過的測試的狀態。

  • 失敗的測試會顯示紅色 X 和輸出連結 (會顯示測試回合的主控台輸出和 unittest 輸出):

    螢幕擷取畫面顯示了 Visual Studio 2022 測試總管中失敗測試的狀態和原因詳情。

    螢幕擷取畫面顯示了測試總管中失敗測試的狀態。

    螢幕擷取畫面顯示了測試總管中失敗測試的原因。

使用偵錯工具來檢查測試

單元測試是程式碼片段,它們和其他程式碼一樣會有錯誤,有時需要在偵錯工具中執行。 在 Visual Studio 偵錯工具中,您可以設定中斷點、檢視變數以及逐步檢視程式碼。 Visual Studio 也提供診斷工具以進行單元測試。

請檢閱有關使用 Visual Studio 偵錯工具檢查測試的這些要點:

  • 根據預設,測試偵錯會使用 Visual Studio 2019 16.5 版和更新版本的 debugpy 偵錯工具。 某些舊版 Visual Studio 會使用 ptvsd 4 偵錯工具。 如果使用舊版 Visual Studio 並偏好 ptvsd 3 偵錯工具,請選取 [工具]>[選項]>[Python]>[偵錯] 底下的 [使用舊版偵錯工具] 選項。

  • 若要開始偵錯,請在程式碼中設定初始中斷點,然後在 [測試總管] 中以滑鼠右鍵按一下測試 (或一系列測試),然後選取 [偵錯選取的測試]。 Visual Studio 會以與針對應用程式碼一樣的方式,啟動 Python 偵錯工具。

    顯示如何使用 Visual Studio 2022 偵錯工具對單元測試進行偵錯的螢幕擷取畫面。

    顯示如何使用 Visual Studio 偵錯工具對單元測試進行偵錯的螢幕擷取畫面。

  • 如果您願意,可以使用 [分析所選測試的程式碼涵蓋範圍]。 如需詳細資訊,請參閱使用程式碼涵蓋範圍來決定所測試的程式碼數量