MSTest 概述

MSTest(Microsoft测试框架)是适用于 .NET 应用程序的完全支持的开放源代码和跨平台测试框架。 它允许编写和执行测试,并提供测试套件与 Visual Studio 和 Visual Studio Code 测试资源管理器、.NET CLI 和许多 CI 管道的集成。

MSTest 托管在 GitHub 上,适用于所有受支持的 .NET 目标。

主要功能

MSTest 提供全面的测试功能:

  • 数据驱动测试:使用DataRow、CombinatorialDataDynamicData和外部数据源运行具有多个输入的测试。
  • 测试生命周期管理:在程序集、类和测试级别设置和清理。
  • 并行执行:并发运行测试以减少执行时间。
  • 测试组织:使用元数据属性对测试进行分类、优先级和筛选。
  • 代码分析器:检测常见问题并在编译时强制实施最佳做法。
  • 断言:用于验证结果的综合断言方法。

支持的平台

MSTest 支持各种 .NET 平台和目标框架。 下表总结了平台支持和特殊注意事项:

平台 目标框架 线程支持 特殊属性 注释
.NET .NET 8+ 完全并行化 所有属性 建议用于新项目
.NET Framework 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+ 完全并行化 大多数属性 有限的功能集;请参阅本机 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);
    }
}

将 VSTest 用于经典 UWP 和新式 .NET UWP,因为两者都在 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 示例测试 AOT 方案。

浏览器与 WASI WebAssembly

MSTest 4.4 预览版支持自定义.NET 10 浏览器或 WASI WebAssembly 主机。 若要从引用的 MSTest 程序集运行测试,请调用 AddMSTest。 在宿主项目中,将EnableMSTestRunner设置为true,并将GenerateTestingPlatformEntryPoint设置为false。 使 MSTest 和 MTP 包版本保持一致。

在单线程 WebAssembly 运行时上,MSTest 无法强行中断超时测试。 浏览器或 WASI 不支持调试器等待,浏览器不支持调试器启动选项。

MTP 可以通过主机的 WebAssembly 虚拟文件系统和工件通道流式传输 TRX 数据,并上报测试和会话文件工件。 仅当主机提供支持的 HTTP 访问和所需的管道身份验证时,Azure DevOps发布才有效。 这些功能不会授予不受限制的主机文件系统或网络访问权限。

有关完整的浏览器主机,请参阅 BrowserPlayground 示例。

STA 线程支持

对于 Windows COM 互操作方案,MSTest 提供 STATestClass 和 STATestMethod 属性来在单线程单元中运行测试。 有关 STA 线程处理的详细信息,包括异步延续支持,请参阅UseSTASynchronizationContext线程属性。

测试运行程序

MSTest 支持两个测试执行平台:

对于新项目,建议将 MTP 与 MSTest.Sdk 配合使用。

MSTest 支持策略

由于 v3.0.0,MSTest 严格遵循 语义版本控制。

MSTest 团队仅支持最新发布的版本,强烈建议用户始终更新到最新版本,以受益于改进和安全修补程序。 Microsoft不支持预览版,但在最终版本之前提供公共测试。

版本历史记录

MSTest 在主要版本中发生了重大演变:

  • MSTest v1:原始 Visual Studio 测试框架
  • MSTest v2:具有跨平台支持的第一个开源版本
  • MSTest v3:使用改进的体系结构和功能进行新式重写
  • MSTest v4:具有增强功能的当前版本

注释

截至 2026 年 8 月,MSTest 4.4 正在开发中。 在发布版本 4.4.0 之前,MSTest 4.4 中标记为引入的功能需要预览版本。

有关所有版本的详细信息,请参阅 MSTest 更改日志。

如果要从旧版本升级,请参阅迁移指南:

中断性变更

MSTest 团队仔细审查并最大程度地减少重大更改。 当需要重大更改时,团队会提前使用 GitHub 公告 和 中断性变更标签 通知社区,为用户提供时间提供反馈,并在发布更改之前提出问题。

后续步骤