The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 VS Code 順利啟用測試總管 (Test Explorer) 測試 .NET 應用程式

我最近在嘗試使用 GitHub Copilot 來撰寫單元測試,而在使用的過程中,我發現 Visual Studio Code 的測試總管 (Test Explorer) 竟然抓不到我專案中的測試案例,研究了一下才發現是 .NET Core Test Explorer 沒有正確設定導致的。不過,其實 C# Dev Kit 擴充套件本來就內建了 C# 的測試轉接器 (Test Adapter),不需要 .NET Core Test Explorer 就能跑,索性我就把套件刪除了。今天這篇文章我就來分享如何設定讓 C# Dev Kit 能夠正確的啟用測試總管 (Test Explorer),方便我們執行單元測試。

A wide image depicting a programmer in a modern, well-lit office, using Visual Studio Code on a large monitor  The focus is on the screen, which shows

關於 .NET Core Test Explorer 的設定方法

其實你也不一定要移除 .NET Core Test Explorer 擴充套件,只是要做額外設定才能正常運作。

首先,微軟新推出的 C# Dev Kit 擴充套件有支援 *.sln 方案檔功能,你可以從 Visual Studio Code 開啟整個方案資料夾,資料夾下可以包含多個專案(*.csproj),開發起來比較方便。

不過,若要讓 .NET Core Test Explorer 擴充套件可以正常抓到測試案例的項目,你必須要在專案的根目錄下新增 .vscode/settings.json 設定檔,並加入以下設定:

{
    "dotnet-test-explorer.testProjectPath": "**/*[Tt]ests.@(csproj|vbproj|fsproj)"
}

這個設定是會自動找尋任意目錄下是否有 *Tests.csproj*Tests.vbproj*Tests.fsproj 專案檔,有的話就會從這些專案檔中找尋所有可能的測試案例,並自動加入到測試總管 (Test Explorer) 中。

不過,我認為 .NET Core Test Explorer 擴充套件應該可以完整刪除了,因為 C# Dev Kit 擴充套件內建的功能中,幾乎可以完整取代 .NET Core Test Explorer 擴充套件中的所有功能。

關於 C# Dev Kit 擴充套件

為了要讓 C# Dev Kit 擴充套件可以成功識別方案或專案中的測試案例,其實有一些步驟需要設定,而且針對不同的測試框架也有不同的設定方法,以下我就分別針對 xUnitNUnitMSTest 來說明設定的方式。

不過,在開始設定之前,我想先跟大家溝通測試案例的管理方法,因為管理單元測試的程式碼有 2 種常見的作法:

  1. 類別測試類別寫在同一個專案中,甚至放在同一個資料夾下的不同 *.cs 檔案中

    在同一個專案中,將類別與測試類別分開放置,這樣的好處是可以讓專案的結構比較清楚,而且要找到測試方法也很容易,因為檔名有共通性,檔案總管中也很容易找到測試程式碼。

    這種方法需要在同一個專案下,額外安裝測試框架相關的 NuGet 套件。

  2. 類別測試類別寫在同一個方案下,但分別放在不同的專案中

    這也是一種常見的測試管理方法,將類別放在另一個獨立的 {ProjectName}Tests 專案中,可以讓測試程式碼全部集中,不會跟主要的程式碼放在一起。

    建立獨立的測試專案,可以透過 dotnet new xunit 這樣的命令快速建立專案,建立的過程會自動設定好所有必要的 NuGet 套件,初始化專案比較方便。不過,較為麻煩的地方就在於,我們需要將原本的專案加入到測試專案中,這樣才能參考到原本專案的類別,並對這些類別進行測試。

    這種方法不需要在原本專案中加入測試相關的 NuGet 套件,專案本身比較乾淨。

    例如我想替 ASP.NET Core MVC 專案建立一個相對應的測試專案,就可以這樣執行 .NET CLI:

    # 建立 ASP.NET Core MVC 專案
    dotnet new mvc -n mvc1
    
    # 建立 xUnit 測試專案
    dotnet new xunit -n mvc1.tests
    
    # 建立方案檔
    dotnet new sln
    
    # 將專案加入方案檔
    dotnet sln add .\mvc1\mvc1.csproj
    dotnet sln add .\mvc1.tests\mvc1.tests.csproj
    
    # 將 mvc1.tests 專案引入 mvc1 專參考
    dotnet add .\mvc1.tests\mvc1.tests.csproj reference .\mvc1\mvc1.csproj
    

設定 xUnit 測試專案

如果你想讓一個沒有測試案例的專案,變成可以執行 xUnit 測試的專案,你必須手動執行以下步驟:

  1. 安裝以下 4 個 NuGet 套件:

    Microsoft.NET.Test.Sdk
    xunit
    xunit.runner.visualstudio
    coverlet.collector
    

    安裝的 .NET CLI 命令為:

    dotnet add package Microsoft.NET.Test.Sdk
    dotnet add package xunit
    dotnet add package xunit.runner.visualstudio
    dotnet add package coverlet.collector
    

    這種安裝設定方法通常可以安裝到最新版的 NuGet 套件。

  2. 建置專案

    dotnet build
    

    建置成功後,就會在 Visual Studio Code 的測試總管 (Test Explorer) 中看到所有的測試案例了!

    Test Explorer

  3. 執行測試

    你可以從測試總管 (Test Explorer) 執行測試,也可以使用 .NET CLI 命令執行測試:

    dotnet test
    

設定 NUnit 測試專案

如果你想讓一個沒有測試案例的專案,變成可以執行 NUnit 測試的專案,你必須手動執行以下步驟:

  1. 安裝以下 3 個 NuGet 套件:

    Microsoft.NET.Test.Sdk
    nunit
    NUnit3TestAdapter
    

    安裝的 .NET CLI 命令為:

    dotnet add package Microsoft.NET.Test.Sdk
    dotnet add package nunit
    dotnet add package NUnit3TestAdapter
    

    這種安裝設定方法通常可以安裝到最新版的 NuGet 套件。

  2. 建置專案

    dotnet build
    

    建置成功後,就會在測試總管 (Test Explorer) 中看到所有的測試案例了!

  3. 執行測試

    你可以從測試總管 (Test Explorer) 執行測試,也可以使用 .NET CLI 命令執行測試:

    dotnet test
    

設定 MSTest 測試專案

如果你想讓一個沒有測試案例的專案,變成可以執行 MSTest 測試的專案,你必須手動執行以下步驟:

  1. 安裝以下 4 個 NuGet 套件:

    Microsoft.NET.Test.Sdk
    MSTest.TestAdapter
    MSTest.TestFramework
    coverlet.collector
    

    安裝的 .NET CLI 命令為:

    dotnet add package Microsoft.NET.Test.Sdk
    dotnet add package MSTest.TestAdapter
    dotnet add package MSTest.TestFramework
    dotnet add package coverlet.collector
    

    這種安裝設定方法通常可以安裝到最新版的 NuGet 套件。

  2. 建置專案

    dotnet build
    

    建置成功後,就會在測試總管 (Test Explorer) 中看到所有的測試案例了!

  3. 執行測試

    你可以從測試總管 (Test Explorer) 執行測試,也可以使用 .NET CLI 命令執行測試:

    dotnet test
    

簡介 C# Dev Kit 擴充套件內建的測試相關功能

  1. 執行/偵錯測試案例

    C# Dev Kit 會在你的編輯器中測試方法 (Test methods) 左側地方,出現一個綠色的三角形按鈕,按下去就可以執行測試,或是按下右鍵,選擇 Run TestDebug Test 來執行測試。

    運行/偵錯測試使用案例

  2. 測試總管 (Test Explorer)

    Visual Studio Code 有內建測試總管 (Test Explorer),預設會顯示你目前的 VS Code Workspace 中所有的測試案例,您可以選擇 Visual Studio Code 左側(或右側)的活動欄上的燒杯按鈕將其開啟。您還可以執行/偵錯您的測試案例並從那裡查看其測試結果。

    image

  3. 查看測試結果

    執行/偵錯測試案例後,相關測試專案的狀態將在編輯器裝飾和測試資源管理器中更新。當你點擊測試失敗的項目時,還會自動開啟測試程式的位置,並顯示測試失敗的原因與追蹤堆疊資訊。

    image

  4. VS Code 測試命令

    透過在命令面板 ( Ctrl+Shift+PF1 ) 中搜尋 Test: 可以找到所有測試命令。

    Testing command in Command Palette

  5. VS Code 測試設定

    有一些特定於測試的 VS Code 設定,可以透過在設定編輯器中搜尋測試來找到 ( Ctrl+, )。

    Testing settings

相關連結

留言評論