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 提供 STATestClass 和 STATestMethod 属性来在单线程单元中运行测试。 有关 STA 线程处理的详细信息,包括异步延续支持,请参阅UseSTASynchronizationContext线程属性。
测试运行程序
MSTest 支持两个测试执行平台:
- Microsoft.Testing.Platform (MTP):新式推荐的测试平台,具有改进的性能和可扩展性。
- VSTest:.NET 的原始和默认测试平台。
对于新项目,建议将 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 公告 和 中断性变更标签 通知社区,为用户提供时间提供反馈,并在发布更改之前提出问题。