介绍 MSTest Runner - CLI, Visual Studio 等更多
介绍 MSTest Runner - CLI, Visual Studio 等更多
https://devblogs.microsoft.com/dotnet/introducing-ms-test-runner/
很荣幸介绍 MSTest runner,它是同于 MSTest 测试的新的轻量级执行器。这个新的执行器使得测试更加可移植,也更加可靠。使得测试执行更快,它可以使用点菜式的扩展,为你的成功提供新的工具。
它是什么?
MSTest runner 是通过独立的可执行的方式来构建和执行 MSTest。一个简单的控制台应用用于托管和运行你的测试。这样你就不需要任何额外的工具,比如 vstest.console、dotnet test 或者 Visual Studio 等等来执行你的测试。使其成为为功率或存储有限的设备编写测试的完美工具。
安装 MSTest runner
任何级别的开发者,任何尺寸的项目都可以从新的 MSTest runner 中获得速度和可移植性的好处。我们欢迎你尝试它。
MSTest runner 从 NuGet 包 MSTest。TestAdapter 的 3.2.0 开始提供。
为你的项目启用它只需要简单的安装并更新包,然后设置两个元素:
- EnableMSTestRunner
- OutputType
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Enable the MSTest runner, this is an opt-in feature -->
<EnableMSTestRunner>true</EnableMSTestRunner>
<!-- We need to produce an executable and not a DLL -->
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<!--
MSTest meta package is the recommended way to reference MSTest.
It's equivalent to referencing:
Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework
MSTest.Analyzers
-->
<PackageReference Include="MSTest" Version="3.2.0" />
</ItemGroup>
</Project>
在做了这些改变之后,重新构建你的测试项目,该测试项目将会创建一个可以直接执行的测试程序。

在上图中可以看到,我们不再需要执行 dotnet test 命令,也不需要 vstest.console 或者在 Visual Studio 中执行我们的测试。测试变成一个普通的控制台应用,其中发现和执行了所有的测试。
也就是说,运行器与 dotnet test、vstest.console、Visual Studio 测试资源管理器和 Visual Studio Code 测试资源管理器集成,以提供与你习惯的相同体验。请参阅我们的文档以了解更多信息。
使用 runner 与 VSTest 的优点
可移植性
直接从可执行文件运行测试可以消除运行测试通常需要的许多复杂性和基础结构。由于测试项目不再特殊,因此可以使用现有的 dotnet 工具对测试项目执行有趣的操作,例如将它们构建为自包含的项目:
dotnet publish --runtime win-x64 --self-contained
上面的示例将测试项目发布为与其需要的运行时合并在一起。这就支持你可以将测试项目转移到没有提供运行时的机器上来执行,可以在多台计算机上执行而不需要额外的配置。
或者,在每个失败的测试之后,你可以使用这个功能创建一个 zip 文件,这样可以与你的 CI 机器上相同的方式,在本地再现失败的测试,以便交互式的调试失败的测试用例。
另外一个示例是可以同鞥托管在 docker 容器中的 .NET 应用来执行测试,而不再需要 .NET SDK存在。 对于我们的高级用户来说,这是一个经常出现的绊脚石:
RunInDocker> docker build . -t my-server-tests
RunInDocker> docker run my-server-tests
Microsoft(R) Testing Platform Execution Command Line Tool
Version: 1.0.0-preview.23622.9+fe96e7475 (UTC 2023/12/22)
RuntimeInformation: linux-x64 - .NET 8.0.0
Copyright(c) Microsoft Corporation. All rights reserved.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://[::]:8080
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /test/test
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 GET http://localhost:8080/hello - - -
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'HTTP: GET /hello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'HTTP: GET /hello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/1.1 GET http://localhost:8080/hello - 200 - text/plain;+charset=utf-8 73.5556ms
Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 1.7s - MyServer.Tests.dll (linux-x64 - .NET 8.0.0)
MSTest runner 可移植的另一个好处是,你现在可以像任何常规的可执行程序一样调试你的测试用例。例如,在 Visual Studio 中,你可以这样简单完成:
- 在你的解决方案管理器中导航到你准备执行的测试项目,右键并选择
设置为启动项目 - 跳转到你希望调试的测试用例,然后加上断点
- 在菜单中选择
调试->开始调试来执行测试项目
还可以使用 --filter 来过滤你希望调试的方式或者一组方法来加速你的调试体验。例如 --filter MSTestNamespace.UnitTest1.TestMethod2 来仅仅执行 (调试) 选中的测试方法 TestMethod2。在这里 可以发现更多支持的过滤器。下面是一个 launchSettings.json 的示例。
{
"profiles": {
"MSTestProject": {
"commandName": "Project",
"commandLineArgs": "--filter MSTestNamespace.UnitTest1.TestMethod2"
}
}
}
最后,我们正在支持 MSTest 的原生 AOT 兼容,以便支持在原生 AOT 模式下测试你的应用。为了达到这个目标,我们需要显著的修改 MSTest 的内部处理。如果你感觉这个功能很有价值,请参阅 add a comment or thumbs up on our GitHub issue。
性能
MSTest runner 使用一个进程来运行测试(与 dotnet test 相比),以节省生成服务器上的资源。
它还避免了对进程间序列化通信的需求,并依靠现代 .NET API 来提高并行性并减少占用空间。
在切换到使用新的 MSTest runner 的内部 Microsoft 项目中,我们看到了 CPU 和内存的大量节省。看到的一些项目能够以 3 倍的速度完成测试,同时在使用 dotnet test 运行时使用的内存减少 4 倍。
尽管这些数字可能令人印象深刻,但当您在测试项目中启用并行测试运行时,可以获得更大的收益。为此,我们添加了一组用于 MSTest 代码分析的新分析器,以促进测试的良好做法和正确设置。
可靠性
MSTest 运行器正在设置新的默认值,这些默认值更安全,并且使您更难意外错过运行任何测试。在做决定时,我们总是在更严格的一面犯错,让你在不需要这种严格的时候做出选择。
例如,当从项目运行的测试为零时,MSTest 运行器将默认失败,这可以通过 --minimum-expected-tests 控制,默认为 1。您可以将其设置为 0,以便在没有测试时不会失败,但您可以轻松地将其设置为更高的数字以防止回归:
C:\p\testfx\samples\mstest-runner\Simple1> C:\p\testfx\artifacts\bin\Simple1\Debug\net8.0\Simple1.exe --minimum-expected-tests 10
Microsoft(R) Testing Platform Execution Command Line Tool
Version: 1.0.0-preview.23622.9+fe96e7475 (UTC 2023/12/22)
RuntimeInformation: win-x64 - .NET 8.0.0
Copyright(c) Microsoft Corporation. All rights reserved.
Minimum expected tests policy violation, tests ran 1, minimum expected 10 - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 153ms - Simple1.dll (win-x64 - .NET 8.0.0)
但这并不是唯一的可靠性改进。我们从头开始编写 MSTest runner,以使其更可靠。
MSTest runner 由于其新体系结构,不依赖于文件夹扫描、动态加载或反射来检测和加载扩展。这样可以更轻松地在本地和 CI 中执行相同的行为,并显著缩短启动测试应用程序和运行第一个测试之间的时间。
运行器被设计为全程异步和可并行化,从而防止在使用 VSTest 时可能注意到的一些挂起或死锁。
运行器不检测目标框架或平台,或任何其他 .NET 配置。它完全依赖于 .NET 平台来做到这一点。这避免了逻辑的重复,并避免了许多边缘情况,这些情况在规则突然改变时会破坏您的测试。
扩展性
MSTest 运行器基于新的准系统测试平台和扩展性模型,可以轻松扩展或覆盖测试执行的许多方面。
现在,您可以轻松提供自己的报告生成器、测试编排、记录器,甚至增加可用的命令行选项。
Microsoft 提供了可选扩展列表,以便你具备运行测试和排除测试故障所需的所有内容。
我们将继续努力提供更多扩展和功能,以丰富您的测试体验。如果您有特定需求或想帮助扩展库,请联系我们。
总结
MSTest 运行器是一种高性能、可托管、可扩展、可靠且集成的解决方案,用于运行 MSTest 测试。无论您是技术爱好者,还是面临 VSTest 的一些问题,或者只是好奇,我们都欢迎您尝试并在本文下方分享您的反馈。
介绍 MSTest Runner - CLI, Visual Studio 等更多的更多相关文章
- Code Runner,率先支持刚发布的 Visual Studio 2022!
Visual Studio 被不少网友成为"宇宙第一IDE".但是,我写✍ PHP.Java 和 C#,也都是用的 VS Code. 我所在的组,是 Visual Studio C ...
- Visual Studio原生开发的10个调试技巧
这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧.我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧.(如果你是工作在托 ...
- Visual Studio 中可执行文件中嵌入的清单文件
概要 本分步指南介绍如何在 Microsoft Visual Studio 2005年中的可执行文件 (.exe) 文件中嵌入的清单文件.如果您要开发"认证 Windows Vista&qu ...
- Visual Studio原生开发的10个调试技巧(一)
最近碰巧读了Ivan Shcherbakov写的一篇文章,<11个强大的Visual Studio调试小技巧>.这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其 ...
- Cocos开发中Visual Studio下libcurl库开发环境设置
我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件 ...
- Visual Studio原生开发的10个调试技巧(转)
本文由 伯乐在线 - JingerJoe 翻译自 Marius Bancila.转载请参见文章末尾处的要求. [感谢@_La_Isla_Bonita 的热心翻译.如果其他朋友也有不错的原创或译文, ...
- 在 Visual Studio 2010 中创建 SharePoint 2010 事件接收器
Microsoft Visual Studio 2010 提供了一个可用于生成事件接收器的项目类型,事件接收器会在 Microsoft SharePoint 2010 网站上选择事件之前或之后执行操作 ...
- 在Visual Studio Code中开发Office Add-in
作者:陈希章 发表于 2017年7月13日 上一篇 我介绍了如何在Visual Studio中开发Office Add-in,因为有标准的项目模板,一系列配套的工具,尤其是自带的一键调试功能,可以让开 ...
- 【转】让开发变得简单一点- Visual Studio 2010几个让人印象深刻的新功能
原文网址:http://xhinker.blog.51cto.com/640011/313055/ 引言 "我们的目标,不仅仅是做出几个新功能,而是要回答一个问题:'如何让现在的开发人员生活 ...
- 利用Visual Studio Natvis 框架简化C++的变量调试工作
相信用C++开发过UI界面的程序员都对其变量调试工作头痛不已,由于复杂的继承关系,要查看到某个变量往往需要一系列的层层深入的点击,如下图就是查看TextBox的Text的例子: 为了查看Text属性, ...
随机推荐
- 第6天:基础入门-抓包技术&HTTPS协议&APP&小程序&PC应用&WEB&转发联动
安装charles 到Windows本地: 安卓模拟器安装: 如果抓模拟器就要使用从远程主机,如果不是,则从所有进程 访问 谷歌浏览器安装证书: PC微信小程序代理抓取: 41:43 :如何将char ...
- kali安装和升级
实验介绍: kali集成了世界上所有优秀的渗透测试工具 一:在VMware上安装 这里只详细介绍kali在VMware的安装,u盘和物理机上的安装不做详解 在kali官网下载kali镜像iso文件 下 ...
- foobar2000 v1.6.11 汉化版(更新于 2022.08.25)
foobar2000 v1.6.11 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...
- UEFI原理与编程(三)
1 开发UEFI服务 本质Protocol 就是包含属性和函数指针的结构体,功能上来说就是提供者和使用者对服务的一种约定. 2 开发UEFI驱动 一个设备/总线驱动程序在安装时首要找到对应的硬件设备( ...
- android 代码如何增加atrace跟踪
在 Android 代码中增加 Atrace 跟踪,可以使用 Android 提供的 android.os.Trace 类.这允许你在应用代码中手动添加自定义的跟踪点,以捕获特定代码段的执行情况.以下 ...
- 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
在8月24日举办的[墨天轮数据库沙龙第九期-工业实时数据库专场]中,麦杰科技创始人 卢学东分享了<麦杰openPlant实时数据库系统及应用>主题演讲,本文为整理内容. 导读 工业互联网推 ...
- electron 菜单选项 - 隐藏,设置菜单
隐藏菜单 const { app, Menu, session } = require('electron'); /*隐藏electron的菜单栏*/ Menu.setApplicationMenu( ...
- 封装 axios 拦截器
import axios from "axios"; // 自定义一个 request 实例 const request = axios.create({ baseURL: &qu ...
- KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- Chirpy+Github
相关网址 Chirpy 示例:网页上有官方教程,我写的肯定不全 Chirpy 示例仓库:这个就是包含官方教程的那个示例的仓库 Chirpy 模板仓库:直接 fork 这个仓库,快速搭建,没有多余的东西 ...