MSTest,Microsoft 測試框架,是一個完全支援的開源跨平台 .NET 應用程式測試框架。 它允許你撰寫並執行測試,並提供與 Visual Studio 及 Visual Studio Code 測試總管、.NET CLI 以及多個 CI 管線整合的測試套件。
MSTest 托管在 GitHub ,並支援所有支援的 .NET 目標。
主要功能
MSTest 提供完整的測試功能:
-
資料驅動測試:使用多輸入測試,使用
DataRow、CombinatorialData、DynamicData及外部資料來源。 - 測試生命週期管理:在組裝、類別及測試層級進行設定與清理。
- 平行執行:同時執行測試以縮短執行時間。
- 測試組織:以元資料屬性分類、優先排序及篩選測試。
- 程式碼分析器:在編譯時偵測常見問題並強制執行最佳實務。
- 斷言:用於驗證結果的完整斷言方法。
支援的平臺
MSTest 支援多種 .NET 平台與目標框架。 下表總結了平台支援及特殊考量:
| 平台 | 目標架構 | 執行緒支援 | 特殊屬性 | 註釋 |
|---|---|---|---|---|
| .NET | .NET 8+ | 全平行化 | 所有屬性 | 推薦用於新專案 |
| .NET 架構 | 4.6.2+ | 全平行化 | 所有屬性 | 完整功能支援 |
| UWP | UAP 10、.NET 10+ 搭配 UWP 工具 | UI 執行緒 | UITestMethod |
MSTest 4.5 與 MTP 2.5 透過 MSTest.Sdk 應用程式模型副車支援經典與現代 UWP |
| WinUI 3 | .NET 8+ | UI 執行緒 | UITestMethod |
MTP 支援封裝、未封裝及 AppContainer 主機;請參考 MSTest 和 MTP 測試 UWP 與 WinUI 3 應用程式 |
| Windows 桌面介面自動化 | .NET 8+ Windows 目標 | STA | STATestClass |
MSTest 4.5 預覽版可以啟動未封裝的 Win32、Windows Forms 和 WPF 應用程式,並透過 Windows 使用者介面自動化 暴露視窗 |
| 原生AOT | .NET 8+ | 全平行化 | 大多數屬性 | 功能有限;參見 Native AOT 範例 |
| 瀏覽器中的 WebAssembly | .NET 10+ 自訂主機 | 單執行緒 | Limited | MTP 執行支援始於 MSTest 4.4 |
| WASI WebAssembly | .NET 10+ 自訂主機 | 單執行緒 | Limited | MTP 執行支援始於 MSTest 4.4 |
平台特定考量
UWP 測試
UWP 測試在 UWP 應用程式容器中執行,許多操作都需要 UI 執行緒:
[TestClass]
public class UwpTests
{
[UITestMethod]
public void TestUwpControl()
{
// Test runs on UI thread
var button = new Button();
Assert.IsNotNull(button);
}
}
從 MSTest 4.5 和 MTP 2.5 開始,使用 MSTest.Sdk 透過 MTP 執行經典 UWP 和現代 .NET UWP 測試。 具完整信任權限的 sidecar 會註冊並啟用套件,授權應用程式確切的套件 SID 以進行 MTP 通訊,並從套件儲存體中複製結果成品檔案。
現代 UWP 需要 .NET 10、UseUwp,以及 Visual Studio UWP 建置工具鏈。 經典的 UWP 保持了其現有 uap10.0 專案的形態。 完整配置請參見 現代 UWP 範例 與 經典 UWP 範例。
WinUI 3 測試
WinUI 3 測試也需要 UI 執行緒存取權限來測試視覺元件:
[TestClass]
public class WinUITests
{
[UITestMethod]
public void TestWinUIControl()
{
// Test runs on UI thread
var window = new MainWindow();
Assert.IsNotNull(window);
}
}
MTP 支援封裝的全信任、非封裝且以 AppContainer 配置的 WinUI 3 測試應用程式。 MSTest.Sdk 直接啟動未封裝的應用程式,並利用其應用程式模型的副車來註冊及啟用已封裝的應用程式。
AppContainer 支援需要 MSTest 4.5 及 MTP 2.5 或更新版本。 VSTest 不支援未封裝的 WinUI 3。 關於設定細節,請參考 MSTest 和 MTP 測試 UWP 和 WinUI 3 應用程式。
Windows 桌面介面自動化
此MSTest.Windows.UIAutomation套件整合了 MSTest 生命週期管理與 Windows 使用者介面自動化,適用於未封裝的 Win32、Windows Forms 及 WPF 應用程式。 如需了解設定、限制,以及 ApplicationTest 和 WindowTest 基底類別,請參閱 使用 MSTest 使用者介面自動化 測試 Windows 桌面應用程式。
原生提前編譯 (AOT)
原生AOT編譯是有支援的,但是因為反射能力的限制,會受到一些限制。 盡可能使用原始碼產生器,並用 NativeAotRunner 範例測試你的《進擊的巨人》情境。
瀏覽器與 WASI 網頁組譯
MSTest 4.4 支援自訂的 .NET 10 瀏覽器或 WASI WebAssembly 主機。 若要從參考的 MSTest 組件執行測試,請呼叫 AddMSTest。 在主專案中,將 EnableMSTestRunner 設為 true,並將 GenerateTestingPlatformEntryPoint 設為 false。 保持 MSTest 和 MTP 套件版本對齊。
在單執行緒的 WebAssembly 執行環境下,MSTest 無法強制中斷逾時測試。 瀏覽器或 WASI 不支援除錯器等待功能,瀏覽器也不支援除錯器的啟動選項。
MTP 可透過主機的 WebAssembly 虛擬檔案系統與產物通道串流 TRX 資料,並回報測試與會話檔案的產物。 Azure DevOps 發佈只有在主機提供支援的 HTTP 存取及所需的管線驗證時才會運作。 這些功能並不允許主機、檔案系統或網路存取不受限制。
完整的瀏覽器主機,請參閱 BrowserPlayground 範例。
STA 執行緒支援
針對 Windows COM 互通情境,MSTest 提供STATestClassSTATestMethod屬性以在單執行緒公寓中執行測試。 關於 STA 執行緒的詳細資訊,包括與 的UseSTASynchronizationContext非同步延續支援,請參見執行緒屬性。
測試跑手
MSTest 支援兩個測試執行平台:
- Microsoft.Testing.Platform (MTP):現代且推薦的測試平台,具備提升的效能與擴充性。
- VSTest:.NET 的原始且預設的測試平台。
對於新專案,我們建議使用 MTP 搭配 MSTest.Sdk。
MSTest 支持原則
自 v3.0.0 起,MSTest 嚴格遵循 語意版本管理。
MSTest 團隊僅支援最新版本,並強烈鼓勵用戶隨時更新至最新版本,以享受改進與安全修補。 Microsoft 不支援預覽版,但在最終版本前提供公開測試。
版本歷程記錄
MSTest 在多個主要版本中經歷了重大演進:
- MSTest v1:原始的 Visual Studio 測試框架
- MSTest v2:首個支援跨平台的開源版本
- MSTest v3:現代重寫,架構與功能有所改進
- MSTest v4:目前版本,功能增強
Note
截至 2026 年 10 月,MSTest 4.5 仍在開發中。 標示為 MSTest 4.5 引入的功能需先進行預覽版,直到 4.5.0 版本釋出。
有關所有版本的詳細資訊,請參閱 MSTest 變更日誌。
如果你是從舊版本升級,請參考遷移指南:
重大突破性變更
MSTest 團隊會仔細審查並減少破壞性變更。 當需要進行重大變更時,團隊會利用 GitHub 公告 和 問題變更標籤 ,提前通知社群,讓用戶有時間在變更發布前提供回饋與提出疑慮。