MSTest 概觀

MSTest,Microsoft 測試框架,是一個完全支援的開源跨平台 .NET 應用程式測試框架。 它允許你撰寫並執行測試,並提供與 Visual Studio 及 Visual Studio Code 測試總管、.NET CLI 以及多個 CI 管線整合的測試套件。

MSTest 托管在 GitHub ,並支援所有支援的 .NET 目標。

主要功能

MSTest 提供完整的測試功能:

  • 資料驅動測試:使用多輸入測試,使用 DataRowCombinatorialDataDynamicData及外部資料來源。
  • 測試生命週期管理:在組裝、類別及測試層級進行設定與清理。
  • 平行執行:同時執行測試以縮短執行時間。
  • 測試組織:以元資料屬性分類、優先排序及篩選測試。
  • 程式碼分析器:在編譯時偵測常見問題並強制執行最佳實務。
  • 斷言:用於驗證結果的完整斷言方法。

支援的平臺

MSTest 支援多種 .NET 平台與目標框架。 下表總結了平台支援及特殊考量:

平台 目標架構 執行緒支援 特殊屬性 註釋
.NET .NET 8+ 全平行化 所有屬性 推薦用於新專案
.NET 架構 4.6.2+ 全平行化 所有屬性 完整功能支援
UWP UAP 10,.NET 9+ 搭配 UAP UI 執行緒 UITestMethod 使用 VSTest。 現代 .NET UWP 需要<UseUwp>true</UseUwp>;請參見 UWP 範例
WinUI 3 .NET 8+ UI 執行緒 UITestMethod 需要 Windows 應用程式 SDK;請參見 使用 MSTest 和 MTP 測試 WinUI 3 應用程式
原生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);
    }
}

對於傳統 UWP 和現代 .NET UWP,請使用 VSTest,因為兩者都在 AppContainer 中執行。 關於現代的 .NET UWP 設定,請參考 BlankUwpNet9App 範例

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);
    }
}

若要配置未封裝或打包的全信任 WinUI 3 測試,請參見 MSTest 和 MTP 測試 WinUI 3 應用程式

從 MSTest 4.4 開始,Microsoft。Testing.Platform 也支援未封裝的 WinUI 測試應用程式。 VSTest 不支援這種情境。 關於設定細節,請參閱 未封裝的 WinUI 範例

原生提前編譯 (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 支援兩個測試執行平台:

對於新專案,我們建議使用 MTP 搭配 MSTest.Sdk

MSTest 支持原則

自 v3.0.0 起,MSTest 嚴格遵循 語意版本管理

MSTest 團隊僅支援最新版本,並強烈鼓勵用戶隨時更新至最新版本,以享受改進與安全修補。 Microsoft 不支援預覽版,但在最終版本前提供公開測試。

版本歷程記錄

MSTest 在多個主要版本中經歷了重大演進:

  • MSTest v1:原始的 Visual Studio 測試框架
  • MSTest v2:首個支援跨平台的開源版本
  • MSTest v3:現代重寫,架構與功能有所改進
  • MSTest v4:目前版本,功能增強

Note

MSTest 4.4 截至 2026 年 8 月仍在開發中。 標示為 MSTest 4.4 新增的功能,需先進行預覽版,直到 4.4.0 版本釋出。

有關所有版本的詳細資訊,請參閱 MSTest 變更日誌

如果你是從舊版本升級,請參考遷移指南:

重大突破性變更

MSTest 團隊會仔細審查並減少破壞性變更。 當需要進行重大變更時,團隊會利用 GitHub 公告問題變更標籤 ,提前通知社群,讓用戶有時間在變更發布前提供回饋與提出疑慮。

後續步驟