通过


MSTest 概述

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

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

主要功能

MSTest 提供全面的测试功能:

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

支持的平台

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

平台 目标框架 线程支持 特殊属性 注释
.NET .NET 8+ 完全并行化 所有属性 建议用于新项目
.NET Framework 4.6.2+ 完全并行化 所有属性 完整功能支持
UWP UAP 10、.NET 9+ 和 UAP UI 线程 UITestMethod 需要设置 <UseUwp>true</UseUwp>;请参阅 UWP 示例
WinUI 3 .NET 8+ UI 线程 UITestMethod 需要 Windows 应用 SDK;请参阅 WinUI 示例
原生 AOT .NET 8+ 完全并行化 大多数属性 有限的功能集;请参阅 本机 AOT 示例

特定于平台的注意事项

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 设置,请参阅 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 设置,请参阅 BlankWinUINet9App 示例MSTestRunnerWinUI 示例

本机 AOT

本地化的 AOT 编译受到一些限制,因为反射功能的降低。 尽可能使用源生成器,并使用 NativeAotRunner 示例测试 AOT 方案。

STA 线程支持

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

测试运行程序

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

对于新项目,建议将 Microsoft.Testing.Platform (MTP)MSTest.Sdk 配合使用。

MSTest 支持策略

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

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

版本历史记录

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

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

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

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

重大变化

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

后续步骤