在本主題中,我們提供一些建議,說明如何測試並驗證使用
教學:建立一個 WinUI 3 單元測試專案。
大多數 Microsoft.UI.Xaml 命名空間下的物件類型必須從 XAML 應用程式程序中的 UI 執行緒中使用。 (關於使用 Windows App SDK 建立但不使用 WinUI 3 的應用程式測試細節,請參見以下章節 測試非 WinUI 功能)
備註
建議您重構要測試的程式碼,將其從主應用程式專案中拉出並將其放入程式庫專案中。 然後,您的應用程式專案和單元測試專案都可以參考該程式庫專案。 本節說明如何利用內建的單元測試專案範本,在 Visual Studio 中為 WinUI 3 應用程式建立單元測試。
備註
此處描述的單元測試應用程式是在 WinUI 3 應用程式的背景下撰寫的。 這是執行需要 XAML 執行時程式碼的測試所必需的。 這個專案將建立一個 XAML UI 執行緒並執行測試。
在本教學課程中,您將瞭解如何:
- 在 Visual Studio 建立一個 WinUI 單元測試應用程式專案。
- 使用 Visual Studio Test Explorer。
- 新增一個 WinUI 類別函式庫專案用於測試。
- 用 Visual Studio 測試總管執行測試。
先決條件
你必須安裝並設定 Visual Studio 才能開發 WinUI。 請參考 快速入門:設定你的環境並建立 WinUI 3 專案。
建立 WinUI 單元測試應用程式專案
首先,建立一個單元測試專案。 項目類型隨附您需要的所有範本檔案。
打開Visual Studio,並在開始視窗選擇 Create a new project。
在 Create a new project視窗中,篩選專案為 C#、Windows 以及 WinUI,選擇 WinUI 單元測試應用程式模板,然後選擇 Next
[選用] 在設定新專案視窗中,變更專案名稱、解決方案名稱 (取消選取將解決方案和專案放在相同目錄中) 和專案的位置。
選取 ,創建。
使用 Test Explorer 執行測試
建立測試專案時,您的測試將顯示在測試專案中,其用於執行單元測試。 你也可以將測試分組、篩選測試清單、建立、儲存並執行測試播放清單,除錯單元測試,並在 Visual Studio Enterprise 中分析程式碼覆蓋率。
UnitTests.cs 檔案包含測試總管所使用的單元測試的原始程式碼。 預設情況下,系統會自動建立此處顯示的基本範例測試:
namespace WinUITest1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Assert.AreEqual(0, 0);
}
// Use the UITestMethod attribute for tests that need to run on the UI thread.
[UITestMethod]
public void TestMethod2()
{
var grid = new Grid();
Assert.AreEqual(0, grid.MinWidth);
}
}
}
如果您尚未這樣做,請建立解決方案。 這將讓 Visual Studio 能夠「發現」所有可用的測試。
開啟 [測試總管]。 如果沒看見,請開啟測試功能表,然後選擇測試總管 (或按 Ctrl + E、T)。
查看測試。 在測試總管視窗中,展開所有節點 (此時只會顯示範例測試)。
執行測試。
- 以滑鼠右鍵點擊各個測試節點,並選取執行。
- 選取測試,然後按下開始按鈕,或按 Ctrl + R、T。
- 按下在檢視中執行所有測試按鈕,或按 Ctrl + R、V。
檢閱結果。 測試完成後,結果將顯示在測試總管視窗中。
新增一個用於測試的類別庫專案
將新專案新增至單元測試解決方案。 在 Solution Explorer,右鍵點選解決方案,選擇 Add -> New Project...。
舉例來說,新增一個 WinUI 3 類別函式庫專案。 從新專案視窗中,選擇 C#/Windows/WinUI 篩選,選擇 WinUI 類別庫。
選擇 「下一步 」並輸入專案名稱(此範例為
WinUIClassLibrary1),按下 建立。
將新的
UserControl添加到現有專案中。 在 Solution Explorer,右鍵點選你剛新增的 WinUI 3 類別函式庫專案,然後從右鍵選單選擇 Add -> 新項目。Visual Studio 解決方案選單截圖,已標示「新增/新增項目」 在新增項目視窗中,選擇已安裝項目列表中的 WinUI 節點,然後從結果中選擇使用者控制。 命名控制項
UserControl1。
開啟 UserControl1.xaml.cs 程式碼後置檔案。 在這個例子中,我們新增了一個名為
GetSevenpublic 的方法,它簡單地回傳一個整數。namespace WinUICLassLibrary1 { public sealed partial class UserControll : UserControl { public UserControl1() { this.InitializeComponent(); } public int GetSeven() { return 7; } } }將 WinUI 3 類別函式庫專案設為單元測試專案的相依,以啟用 WinUI 3 類別庫專案中的型別。 在 Solution Explorer,在類別函式庫專案中,右鍵點選 Dependencies,選擇 Add Project Reference。
Visual Studio 中的相依性右鍵選單截圖,已標示出「新增專案參考」功能。 WinUIClassLibrary1清單中選擇該項目。
在 UnitTests.cs 中建立一個新的測試方法。 由於此測試案例需要執行 XAML UI 執行緒,請將其標記為
[UITestMethod]屬性,而非標準的[TestMethod]屬性。[UITestMethod] public void TestUserControl1() { WinUIClassLibrary1.UserControl1 userControl1 = new WinUIClassLibrary1.UserControl1(); Assert.AreEqual(7, userControl1.GetSeven()); }這個新的測試方法現在會出現在測試總管中,作為其中一個單元測試。
Visual Studio 測試檔案總管視窗的截圖,顯示預設範例測試及新單元測試。 執行測試。
- 以滑鼠右鍵按一下新測試節點,然後選取執行。
- 選取新測試,然後按下開始按鈕,或按 Ctrl + R、T。
- 按下在檢視中執行所有測試按鈕,或按 Ctrl + R、V。
測試非 WinUI 功能
在大多數情況下,應用程式包含不相依於 Microsoft.UI.Xaml 類型,但仍需要測試的功能。 有多種工具可用於測試.NET程式碼,包括 MSTest、NUnit 以及 xUnit。 欲了解更多關於.NET應用程式測試的詳細資訊,請參見 Testing in .NET。
在 Visual Studio 中,你可以透過右鍵點擊 Solution Explorer 中的解決方案,從右鍵選單選擇 Add -> New Project,再從 所有語言 選擇器選擇 C#/ Windows,並從 所有語言 選擇器/ 測試 從 所有專案類型 選擇器,然後從列表中選擇適當的測試工具(MSTest Test Project、NUnit Test Project 或 xUnit Test Project)。
當建立一個新的 MSTest、NUnit 或 xUnit 專案,且參考 WinUI 3 專案時,你必須:
更新測試專案 .csproj 檔案中的
TargetFramework。 這個值必須與 WinUI 3 專案中的TargetFramework匹配。 預設情況下,MSTest、NUnit 和 xUnit 專案針對 .NET 支援的全套平台,但 WinUI 3 專案僅支援 Windows,且有更具體的 TargetFramework。例如,若目標為 .NET 8,則將單元測試專案的 TargetFramework 從
<TargetFramework>net8.0</TargetFramework>更新為<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>。更新測試專案中的 RuntimeIdentifiers。
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) >= 8">win-x86;win-x64;win-arm64</RuntimeIdentifiers><RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) < 8">win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>在測試專案的 .csproj 檔案中,新增以下屬性:
PropertyGroup,以確保測試載入 Windows App SDK 執行時:<WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>確保執行測試的機器已安裝 Windows App SDK 執行環境。 欲了解更多關於 Windows App SDK 部署的資訊,請參閱適用於依賴框架的應用程式並使用外部位置封裝(或未封裝)的 Windows App SDK 部署指南。
其他資源
- 單元測試基本概念
Visual Studio 中的測試工具