使用測試總管執行單元測試

使用 [測試總管] 從 Visual Studio 或協力廠商單元測試專案中執行單元測試。 您也可以使用 [測試總管] 將測試分組成分類、篩選測試清單,以及建立、儲存和執行測試播放清單。 您也可使用 [測試總管] 來偵錯單元測試,以及在 Visual Studio Enterprise 中分析程式碼涵蓋範圍

[測試總管] 可以從解決方案中的多個測試專案來執行測試,以及從屬於實際執行程式碼專案的測試類別來執行測試。 測試專案可以使用不同的單元測試架構。 當進行測試的程式碼是為 .NET 撰寫時,測試專案可以用任何同樣以 .NET 為目標的語言撰寫,而不管目標程式碼的語言為何。 原生 C/C++ 程式碼專案必須使用 C++ 單元測試架構進行測試。

建置測試專案

如果您尚未在 Visual Studio 方案中設定測試專案,您必須先建立和建置測試專案。

Visual Studio 2015 包含 Managed 程式碼和機器碼皆適用的 Microsoft 單元測試架構。 不過,[測試總管] 也可以執行任何已實作測試總管配接器的單元測試架構。 如需安裝協力廠商單元測試架構的詳細資訊,請參閱安裝協力廠商單元測試架構

在 [測試總管] 中執行測試

在建置測試專案後,這些測試便會出現在 [測試總管] 中。 如果看不到測試總管,請選擇 Visual Studio 功能表上的 [測試],並選擇 [測試總管] (或按下 Ctrl + ET)。

Test Explorer

Test Explorer

當您執行、撰寫及重新執行測試時,[測試總管] 會將結果顯示在預設的 [專案]、[命名空間] 及 [類別] 群組中。 您可以變更 [測試總管] 將測試分組的方式。

您可以從 [測試總管] 工具列,執行尋找、組織及執行測試等許多工作。

Run tests from the Test Explorer toolbar

Run tests from the Test Explorer toolbar

執行測試

您可以執行方案中的所有測試、群組中的所有測試,或是您選取的一組測試。 執行下列其中一個動作:

  • 若要執行方案中的所有測試,請選擇 [全部執行] 圖示 (或按 Ctrl + RV)。

  • 若要執行預設群組中的所有測試,請選擇 [執行] 圖示,然後在功能表上選擇該群組。

  • 選取您要執行的個別測試、開啟所選取之測試的右鍵功能表,然後選擇 [執行選取的測試] (或按 Ctrl + RT)。

  • 如果個別測試沒有任何會防止它們依任意順序執行的相依性,請使用工具列的設定功能表開啟平行測試執行。 這可大幅縮短執行所有測試所需的時間。

每次建置後執行測試

若要在每次進行本機建置之後執行單元測試,請開啟 [測試總管] 中的設定圖示,然後選取 [建置之後執行測試]

檢視測試結果

當您執行、寫入、重新執行您的測試時,測試總管會顯示 [失敗的測試] 、[通過的測試] 、[略過的測試] 和 [未執行的測試] 群組中的結果。 在 [測試總管] 底部或一側的詳細資料窗格會顯示測試回合的摘要。

檢視測試詳細資料

若要檢視個別測試的詳細資料,請選取該測試。

Test execution details

Test execution details

測試詳細資料窗格會顯示下列資訊:

  • 測試方法的原始檔案名稱和行號。

  • 測試的狀態。

  • 測試方法執行的經過時間。

如果測試失敗,詳細資料窗格也會顯示:

  • 測試的單元測試架構所傳回的訊息。

  • 測試失敗時的堆疊追蹤。

檢視測試方法的原始程式碼

若要在 Visual Studio 編輯器中顯示測試方法的原始程式碼,請選取測試,然後選擇右鍵功能表上的 [開啟測試] (或按 F12)。

群組和篩選測試清單

測試總管可讓您將測試分組到預先定義的分類。 在測試總管中執行的大部分單元測試架構可讓您定義自己的分類和分類/值組來群組您的測試。 您也可以透過比對字串和測試屬性來篩選測試清單。

將測試清單中的測試分組

[測試總管] 可讓您將測試分組至某個階層。 預設的階層群組是 [專案]、[命名空間],然後是 [類別]。 若要變更測試組織的方法,請選擇 [群組依據] 按鈕 Test Explorer group button,然後選取新的群組準則。

Group tests by category in Test Explorer

您可以定義自己的階層層級,然後依您偏好的順序選取 [分組依據] 選項,例如先依 [狀態] 再依 [類別] 進行分組。

Screenshot of the Visual Studio Test Explorer showing a test hierarchy in one pane and the Group By menu in the other with the Class and State options checked.

[測試總管] 可讓您將測試分組至某個階層。 預設的階層群組是 [專案]、[命名空間],然後是 [類別]。 若要變更測試組織的方法,請選擇 [群組依據] 按鈕 Test Explorer group button,然後選取新的群組準則。

Group tests by category in Test Explorer

您可以定義自己的階層層級,然後依您偏好的順序選取 [分組依據] 選項,例如先依 [狀態] 再依 [類別] 進行分組。

Screenshot of the Visual Studio Test Explorer showing a test hierarchy in one pane and the Group By menu in the other with the Class and State options checked.

測試總管群組

群組 描述
期間 依據執行時間群組測試:[快]、[中] 和 [慢]
State 依據執行結果群組測試:[失敗的測試]、[略過的測試]、[成功的測試]、[不執行]
目標 Framework 依其專案的目標架構將測試分組
Namespace 依上層命名空間將測試分組。
計畫 依上層專案將測試分組。
類別 依上層類別將測試分組。

特性

特性通常是分類名稱/值組,但也可以是單一分類。 您可將特性指派給方法,其中單元測試架構可將其識別為測試方法。 單元測試架構可以定義特性分類。 您可以將值加入特性分類以定義自己的分類名稱/值組。 指定特性分類和值的語法是由單元測試架構所定義。

Microsoft Managed 程式碼單元測試架構中的特性

Microsoft Managed 程式碼單元測試架構中,您可在 TestPropertyAttribute 屬性中定義特性名稱/值組。 測試架構也包含下列預先定義的特性:

特徵 描述
OwnerAttribute 擁有者分類是由單元測試架構所定義,會要求您提供擁有者的字串值。
PriorityAttribute 優先權分類是由單元測試架構所定義,會要求您提供優先權的整數值。
TestCategoryAttribute TestCategory 屬性可讓您指定單元測試的類別。
TestPropertyAttribute TestProperty 屬性可讓您定義特性分類/值組。

Microsoft C++ 單元測試架構中的特性

請參閱如何使用適用於 C++ 的 Microsoft 單元測試架構

建立自訂播放清單

您可以建立和儲存想要執行或檢視為群組的測試清單。 當您選取某個播放清單時,即會在新的 [測試總管] 索引標籤中顯示該清單中的測試。您可以將測試新增至多個播放清單。

若要建立播放清單,請在測試總管中選擇一或多項測試。 在右鍵功能表上,選擇 [新增到播放清單]>[新增播放清單]

Create a playlist

播放清單會在新的 [測試總管] 索引標籤中開啟。您可以使用此播放清單一次,然後捨棄它,或是按一下播放清單視窗工具列中的 [儲存] 按鈕,然後選取名稱和位置來儲存播放清單。

Playlist opens in separate test explorer tab

若要建立播放清單,請在測試總管中選擇一或多項測試。 按一下滑鼠右鍵,然後選擇 [新增到播放清單]>[新增播放清單]

若要開啟播放清單,選擇 Visual Studio 工具列中的播放清單圖是,然後從功能表中選取先前儲存的播放清單檔案。

若要編輯播放清單,您可以滑鼠右鍵按一下任何測試,並使用功能表選項在播放清單中新增或移除測試。

從 Visual Studio 2019 16.7 版開始,您可以選擇工具列中的 [編輯] 按鈕。 您的測試旁邊會出現核取方塊,其中顯示播放清單中包含和排除的測試。 視需要編輯群組。

Edit Playlist button

您也可以核取或取消核取階層中父代群組的方塊。 此動作會建立動態播放清單,其一律根據該群組中的測試來更新播放清單。 例如,如果您在類別旁邊放置核取記號,則從該類別新增的任何測試都會成為此播放清單的一部分。 如果您從該類別刪除測試,則會從播放清單中移除該測試。 您可以在工具列中使用 [儲存] 按鈕來儲存播放清單,並開啟在您磁碟上建立的 .playlist 檔案,以深入了解規則。 此檔案會列出組成播放清單的所有規則和個別測試。

Playlist xml file

如果您想針對特性製作一份播放清單,請對 MSTest 使用下列格式。

<Playlist Version="2.0">
	<Rule Name="Includes" Match="Any">
		<Property Name="Trait" Value="SchemaUpdateBasic" />
	</Rule>
</Playlist>

對 xUnit 使用下列格式。 確定您的 TestCategory 名稱與 [Value] 之間有空格。

<Playlist Version="2.0">
  <Rule Name="Includes" Match="Any">
    <Rule Match="All">
      <Property Name="Solution" />
        <Rule Match="Any">
            <Property Name="Trait" Value="TestCategory [Value]" />
	    </Rule>
	</Rule>
  </Rule>
</Playlist>

您可以建立和儲存想要執行或檢視為群組的測試清單。 當您選取某個播放清單時,即會在新的 [測試總管] 索引標籤中顯示該清單中的測試。您可以將測試新增至多個播放清單。

若要建立播放清單,請在測試總管中選擇一或多項測試。 在右鍵功能表上,選擇 [新增到播放清單]>[新增播放清單]

Create a playlist

播放清單會在新的 [測試總管] 索引標籤中開啟。您可以使用此播放清單一次,然後捨棄它,或是按一下播放清單視窗工具列中的 [儲存] 按鈕,然後選取名稱和位置來儲存播放清單。

Playlist opens in separate test explorer tab

若要建立播放清單,請在測試總管中選擇一或多項測試。 按一下滑鼠右鍵,然後選擇 [新增到播放清單]>[新增播放清單]

若要開啟播放清單,選擇 Visual Studio 工具列中的播放清單圖是,然後從功能表中選取先前儲存的播放清單檔案。

若要編輯播放清單,您可以滑鼠右鍵按一下任何測試,並使用功能表選項在播放清單中新增或移除測試。

從 Visual Studio 2019 16.7 版開始,您可以選擇工具列中的 [編輯] 按鈕。 您的測試旁邊會出現核取方塊,其中顯示播放清單中包含和排除的測試。 視需要編輯群組。

Edit Playlist button

您也可以核取或取消核取階層中父代群組的方塊。 此動作會建立動態播放清單,其一律根據該群組中的測試來更新播放清單。 例如,如果您在類別旁邊放置核取記號,則從該類別新增的任何測試都會成為此播放清單的一部分。 如果您從該類別刪除測試,則會從播放清單中移除該測試。 您可以在工具列中使用 [儲存] 按鈕來儲存播放清單,並開啟在您磁碟上建立的 .playlist 檔案,以深入了解規則。 此檔案會列出組成播放清單的所有規則和個別測試。

Playlist xml file

如果您想針對特性製作一份播放清單,請對 MSTest 使用下列格式。

<Playlist Version="2.0">
	<Rule Name="Includes" Match="Any">
		<Property Name="Trait" Value="SchemaUpdateBasic" />
	</Rule>
</Playlist>

對 xUnit 使用下列格式。 確定您的 TestCategory 名稱與 [Value] 之間有空格。

<Playlist Version="2.0">
  <Rule Name="Includes" Match="Any">
    <Rule Match="All">
      <Property Name="Solution" />
        <Rule Match="Any">
            <Property Name="Trait" Value="TestCategory [Value]" />
	    </Rule>
	</Rule>
  </Rule>
</Playlist>

測試總管資料行

群組 在 [測試總管] 中也與 [特性]、[堆疊追蹤]、[錯誤訊息] 及 [完整名稱] 一起可供作為資料行。 大多數資料行預設並不可見,而您可以自訂要看見的資料行及其顯示順序。

Screenshot of the Visual Studio Test Explorer showing a menu with Columns selected and a sub-menu with Duration, Traits, and Error Message selected.

篩選、排序及重新排列測試資料行

您可以篩選、排序及重新排列資料行。

  • 若要篩選成特定特性,請按一下 [特性] 資料行頂端的篩選圖示。

    Column filter

  • 若要變更資料行的順序,請按一下資料行標頭,然後將其向左或右拖曳。

  • 若要排序資料行,請按一下資料行標頭。 並非所有資料行都可排序。 您也可以按住 Shift 鍵,然後按一下其他的資料行標頭,依次要資料行進行排序。

    Column sort

測試總管資料行

群組 在 [測試總管] 中也與 [特性]、[堆疊追蹤]、[錯誤訊息] 及 [完整名稱] 一起可供作為資料行。 大多數資料行預設並不可見,而您可以自訂要看見的資料行及其顯示順序。

Screenshot of the Visual Studio Test Explorer showing a menu with Columns selected and a sub-menu with Duration, Traits, and Error Message selected.

篩選、排序及重新排列測試資料行

您可以篩選、排序及重新排列資料行。

  • 若要篩選成特定特性,請按一下 [特性] 資料行頂端的篩選圖示。

    Column filter

  • 若要變更資料行的順序,請按一下資料行標頭,然後將其向左或右拖曳。

  • 若要排序資料行,請按一下資料行標頭。 並非所有資料行都可排序。 您也可以按住 Shift 鍵,然後按一下其他的資料行標頭,依次要資料行進行排序。

    Column sort

搜尋和篩選測試清單

您也可以使用 [測試總管] 搜尋篩選,以限制您檢視和執行之專案中的測試方法。

當您在 [測試總管] 的搜尋方塊鍵入字串並選擇 Enter 時,會將測試清單篩選為只顯示包含該字串之完整名稱的測試。

若要依據不同準則篩選:

  1. 開啟搜尋方塊右邊的下拉式清單。

  2. 選擇新的準則。

  3. 在引號之間輸入篩選值。 如果您想要搜尋完全相符的字串,而不是包含的相符項目,請使用等號 (=),而不是冒號 (:)。

Filter tests in Test Explorer

Filter tests in Test Explorer

注意

搜尋是區分大小寫且比對指定字串與準則值的任何部分。

Qualifier 描述
State 在測試總管分類名稱中搜尋相符項目:[失敗的測試] 、[略過的測試] 、[成功的測試]
特性 在特性分類和值中搜尋相符項目。 指定特性分類和值的語法是由單元測試架構所定義。
完整名稱 在測試命名空間、類別和方法的完整名稱中搜尋相符項目。
計畫 在測試專案名稱中搜尋相符項目。
目標 Framework 搜尋測試架構中的相符項目。
Namespace 在測試命名空間中搜尋相符項目。
類別 在測試類別名稱中搜尋相符項目。

若要排除篩部分選條件的結果,請使用下列語法:

FilterName:"Criteria" -FilterName:"SubsetCriteria"

例如,FullName:"MyClass" - FullName:"PerfTest" 傳回名稱包含 "MyClass" 的所有測試,但排除名稱中也包含 "PerfTest" 的測試。

分析單元測試程式碼涵蓋範圍

您可以使用 Visual Studio Enterprise 版中提供的 Visual Studio 程式碼涵蓋範圍工具,來判斷您的單元測試實際測試的產品程式碼數量。 您可以在方案中的所選測試或所有測試上執行程式碼涵蓋範圍。

若要在方案中執行測試方法的程式碼涵蓋範圍:

  • 在 [測試總管] 中按一下滑鼠右鍵,然後選取 [分析選取之測試的程式碼涵蓋範圍]

[程式碼涵蓋範圍結果] 視窗會顯示線條、函式、類別、命名空間及模組所運用的產品程式碼區塊的百分比。

如需詳細資訊,請參閱使用程式碼涵蓋範圍來決定所測試的程式碼數量

測試快速鍵

測試可以從 [測試總管] 執行,方法是在程式碼編輯器中,以滑鼠右鍵按一下測試並選取 [執行測試],或是在 Visual Studio 中使用預設的 [測試總管] 快速鍵。 部分快速鍵是以內容為基礎。 這表示它們會根據游標在程式碼編輯器中的位置執行、 錯或 配置檔 測試。 如果游標在測試方法內,則該測試方法便會執行。 如果游標是在類別層級,則該類別中的所有測試便會執行。 對於命名空間層級也是如此。

常見命令 鍵盤快速鍵
TestExplorer.DebugAllTestsInContext Ctrl+RCtrl+T
TestExplorer.RunAllTestsInContext Ctrl+RT
TestExplorer.RunAllTests Ctrl+RA
TestExplorer.RepeatLastRun Ctrl+RL

注意

您不能在抽象類別中執行測試,因為測試只定義於抽象類別,而不會具現化。 若要在抽象類別執行測試,請建立衍生自抽象類別的類別。

測試音訊提示

測試總管可以在測試回合完成時播放音效。 有兩種音效,一種音效用來指出測試回合已成功且所有測試皆已通過,另一種音效用來指出測試回合已完成且至少有一個測試失敗。 您可以在預設的 Windows 11 音效對話方塊中設定這些音效。 此功能從 Visual Studio 2019 Update 16.9 Preview 3 開始提供。

  1. 開啟預設的 Windows 11 音效對話方塊。
  2. 瀏覽至 [音效] 索引標籤。
  3. 尋找 Microsoft Visual Studio 類別。 選擇 [測試回合成功] 或 [測試回合失敗] 音效,以選取預設音效或瀏覽至您自己的音訊檔案。
    Windows 11 sound dialog