You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式运行MSTest?规避进程调用与NUnit迁移

编程式运行MSTest单元测试的可行方案

直接调用MSTest框架核心API

MSTest虽未在官方文档中明确说明编程式调用路径,但可通过其核心库实现进程内运行测试,无需依赖外部Process调用:

  • 给服务项目引用与测试项目版本匹配的Microsoft.VisualStudio.TestPlatform.TestFramework、Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions、Microsoft.TestPlatform.Core和Microsoft.TestPlatform.Utilities NuGet包
  • 编写代码初始化测试引擎、加载测试集并应用runsettings配置:
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Engine;
using System.IO;
using System.Collections.Generic;

// 初始化测试引擎实例
var testEngine = TestEngine.CreateInstance();
var testRunSettings = new TestRunSettings();

// 加载本地runsettings配置文件
var runSettingsContent = File.ReadAllText("your-test-settings.runsettings");
testRunSettings.LoadSettingsXml(runSettingsContent);

// 构建测试运行配置
var testConfig = new TestRunConfiguration
{
    RunSettings = testRunSettings,
    TestAssemblyPaths = new List<string> { "Your.Tests.Library.dll" }
};

// 获取测试运行器
var testRunner = testEngine.GetTestRunner(testConfig);

// 订阅测试事件,用于收集指标数据
testRunner.TestRunStarted += (s, e) => { /* 记录测试启动时间 */ };
testRunner.TestResult += (s, e) =>
{
    var testResult = e.Result;
    // 这里可以将单个测试的结果(通过率、耗时、错误信息)写入指标系统
};
testRunner.TestRunCompleted += (s, e) =>
{
    var summary = e.RunSummary;
    // 汇总测试结果:总测试数、通过数、失败数、总耗时等,输出到你的指标服务
};

// 启动测试执行
testRunner.RunTests(testConfig);

Runsettings配置适配注意事项

  • 常规的runsettings配置(如测试过滤器、超时设置)可通过TestRunSettings.LoadSettingsXml直接加载,部分高级配置(如自定义代码覆盖率规则)可能需要手动映射到TestRunConfiguration的对应属性
  • 若测试项目使用了自定义测试适配器,需通过TestRunConfiguration.AdapterPaths指定适配器DLL路径,确保进程能加载到适配器

备选方案:调用TestPlatform CLI核心逻辑

如果直接使用核心API遇到兼容性问题,可通过Microsoft.TestPlatform.Client库在进程内调用测试平台的CLI逻辑,避免启动外部进程:

using Microsoft.VisualStudio.TestPlatform.Client;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;

var testClient = new TestPlatformClient();
var testArgs = new List<string>
{
    "--settings", "your-test-settings.runsettings",
    "--test-assembly", "Your.Tests.Library.dll"
};

// 自定义日志收集器,实现ITestLogger接口接收测试结果
testClient.RegisterTestLogger(new CustomTestMetricsLogger());
testClient.RunTests(testArgs, new TestPlatformOptions());

需自行实现CustomTestMetricsLogger类,通过ITestLogger接口的方法捕获测试事件与结果,进而生成指标数据。


内容的提问来源于stack exchange,提问作者stan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:59:53