介绍 MSTest Runner – CLI、Visual Studio 等

作者:Amaury Levé Marco Rossignoli Jakub Jareš
排版:Alan Wang

我们很高兴推出 MSTest 运行器,这是一款全新的轻量级 MSTest 测试运行器。这个新的运行器使测试更加便携和可靠,运行速度更快,并且具有可扩展性,可以为您提供自选式的测试体验,以及为您添加成功所需的工具。

它是什么?

MSTest Runner 是一种将 MSTest 测试作为独立的可移植可执行文件构建和运行的方法。 您只需要一个简单的控制台应用程序用于托管和运行测试,不需要任何外部工具(例如 vstest.console、dotnet test 或 Visual Studio)来运行测试。这使其成为在那些性能方面或存储方面有限的设备上编写测试的完美工具。

安装 MSTest 运行器

任何经验水平的开发人员和任何规模的项目都可以体验新 MSTest 运行程序的速度和可移植性。我们欢迎您尝试一下!

自版本 3.2.0 起,MSTest 运行器就与 MSTest.TestAdapter NuGet 包捆绑在一起。

在您的项目中启用它只需要安装更新包并设置两个 MSBuild 属性 和 :

<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.SdkMSTest.TestAdapterMSTest.TestFrameworkMSTest.Analyzers-->    <PackageReference Include="MSTest" Version="3.2.0" /></ItemGroup></Project>

进行这些更改后,重新构建您的测试项目,您的测试将创建一个直接运行测试的可执行文件:
在这里插入图片描述
完整示例 – Simple1
在上面的屏幕截图中,您可以看到我们不需要运行 dotnet test、使用 vstest.console 或在 Visual Studio 中运行来运行我们的测试。我们的测试只是一个用于发现并运行测试的普通控制台应用程序。

也就是说,运行器确实与 dotnet test、vstest.console、Visual Studio Test Explorer 和 Visual Studio Code Test Explorer 集成,为您提供与您习惯相同的体验。请参阅我们的文档以了解更多信息。

使用运行器 对比 VSTest 的优点

可移植性

直接从可执行文件运行测试可以消除运行测试通常所需的大量复杂性和基础架构。由于测试项目不再特殊,因此您可以使用现有的 dotnet 工具对测试项目执行有趣的操作,例如将它们构建为自包含的:

dotnet publish --runtime win-x64 --self-contained

上面的示例将发布测试项目及其需要的运行时。这允许您将项目移动到没有此运行时的计算机上,并在多台计算机上运行测试,而无需进行额外的设置。

或者,您可以使用此功能在每次失败的测试运行后创建一个 zip 文件,以便在本地以相同的方式重现在 CI 服务器上出现的故障,并用简便的方式来交互式调试失败的运行。

下面是针对托管在没有可用 dotnet SDK 的 docker 容器中的 dotnet 应用程序运行测试的另一个示例。对于我们的高级用户来说,这是一个经常遇到问题的场景:

RunInDocker> docker build . -t my-server-testsRunInDocker> 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)

完整示例 – RunInDocker

MSTest 运行器可移植性的另一个优点是,您现在可以像调试任何常规可执行文件一样轻松调试测试。例如,在 Visual Studio 中,您现在可以简单地进行如下操作:

  1. 在“解决方案资源管理器”中导航要运行的测试项目,右键选择它并选择“Set as Startup Project”。
  2. 导航到要调试的测试并添加断点
  3. 选择 Debug > Start Debugging(或使用 F5)来运行选定的测试项目。

您还可以使用 --filter 筛选出您想要调试的一个或多个方法,以加快调试速度。例如,–filter MSTestNamespace.UnitTest1.TestMethod2 仅允许运行(调试)命名空间 MSTestNamespace 中的类 UnitTest1 中的测试方法 TestMethod2。 您可以在文本中找到有关可用过滤器的更多信息。以下是 launchSettings.json 的示例:

{"profiles": {"MSTestProject": {"commandName": "Project","commandLineArgs": "--filter MSTestNamespace.UnitTest1.TestMethod2"}}
}

最后,我们正在研究使 MSTest 兼容 NativeAOT,以便您在 NativeAOT 模式下测试应用程序。 为了能够做到这一点,我们需要对 MSTest 的内部结构进行重大修改,如果您觉得这有用,请在我们的 GitHub 问题上添加评论或点赞。

性能

MSTest 运行器使用更少的进程和更少的进程跳跃来运行测试(相较于 dotnet 测试),以节省服务器上的资源。

它还避免了进程间串行通信的需要,并依赖现代 .NET API 来提高并行性并减少内存占用。

在改用新的 MSTest 运行器的 Microsoft 内部项目中,我们发现了在 CPU 和内存的使用方面得到了大幅的降低。一些项目在使用 dotnet 测试时,完成测试的速度提高了3倍,而使用的内存却减少了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 运行器,使其更加可靠。

MSTest 运行器由于新的架构,不再依赖于文件夹扫描、动态加载或反射来检测和加载扩展。 这使得在本地和 CI 中更容易实现相同的行为,并且显着缩短了启动测试应用程序和运行第一个测试之间的时间。

运行器被设计为异步且可并行,从而防止使用 VSTest 时出现的一些挂起或死锁。

运行器不会检测目标框架或平台,或任何其他 .NET 配置。它完全依赖 .NET 平台来完成这项工作。这避免了逻辑重复,并避免了当规则突然改变时许多会破坏测试的边缘情况。

可扩展性

MSTest 运行器基于新的准系统测试平台和可扩展性模型,可以轻松扩展或覆盖测试执行的许多方面。

现在可以容易地提供您自己的报告生成器、测试编排、记录器,甚至增加可用的命令行选项。

Microsoft 提供了一系列可选扩展,以便您配备运行测试和排除故障所需的一切。

我们将继续努力提供更多扩展和功能,以丰富您的测试体验。 如果您有特定需求或想帮助开发库扩展,请与我们联系。

总结

MSTest 运行器是一个用于运行 MSTest 测试的高性能、可托管、可扩展、可靠且集成的解决方案。无论您是技术爱好者、使用 VSTest 时遇到一些问题还是只是好奇,我们都欢迎您尝试一下并在本文下面分享您的反馈。

特别感谢

我们要感谢团队的不懈努力和坚定不移的承诺使这一功能得以实现。

此外,我们还要对帮助试用并支持这一举措的内部团队表示衷心的感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React+Antd+tree实现树多选功能(选中项受控+支持模糊检索)

1、先上效果 树型控件&#xff0c;选中项形成一棵新的树&#xff0c;若父选中&#xff0c;子自动选中&#xff0c;子取消&#xff0c;父不取消&#xff0c;子选中&#xff0c;所有的父节点自动取消。同时支持模糊检索&#xff0c;会检索出所有包含该内容的关联节点。 2、环境准…

centos 7.6 安装cas 对接ldap 单点登录实战

centos 7.6 安装cas 对ldap 单点登录实战 1、安装前准备工作1.1、centos 7.6 安装JDK 1.81.2、centos 7 安装tomcat 9.0.841.3、windows10 安装JDK 1.81.4、windows10 安装打包工具 maven 3.9.6 2、下载cas 5.3 并打包成war包3、部署cas到tomcat4、cas对接ldap 1、安装前准备工…

回归预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现POA-BP鹈鹕算法优化BP神经网络多变量回归预测&#xff08;完整源码…

【UE】游戏运行流程的简单理解

流程图 官方的游戏流程图&#xff1a; 一般顺序为初始化引擎、创建并初始化 GameInstance、加载关卡&#xff0c;最后开始游戏。 总的来说就是&#xff1a; 开始游戏-》游戏实例-》关卡-》游戏模式-》玩家控制器-》Pawn、玩家状态、HUD、UMG&#xff08;可有可无&#xff09; …

RabiitMQ延迟队列(死信交换机)

Dead Letter Exchange&#xff08;死信交换机&#xff09; 在MQ中&#xff0c;当消息成为死信&#xff08;Dead message 死掉的信息&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而 在RabbitMQ中&#xff0c;由…

二、SSM 整合配置实战

本章概要 依赖整合和添加控制层配置编写(SpringMVC 整合)业务配置编写(AOP/TX 整合)持久层配置编写(MyBatis 整合)容器初始化配置类整合测试 2.1 依赖整合和添加 数据库准备 数据库脚本 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT…

【C#】MVVM架构

示例结果展示 前提了解 MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发。 Model——可以理解为带有字段,属性的类。例如学校类,教师类,学生类等 View——可以理解为我们所看到的UI。前端界面。 View Model在View和Model之间,起到连接的作用,…

2024-02-06(Sqoop)

1.Sqoop Apache Sqoop是Hadoop生态体系和RDBMS&#xff08;关系型数据库&#xff09;体系之间传递数据的一种工具。 Sqoop工作机制是将导入或者导出命令翻译成MapReduce程序来实现。在翻译出的MapReduce中主要是对inputformat和outputformat进行定制。 Hadoop生态包括&#…

Swift Combine 从入门到精通一

1. Combine 简介 用 Apple 官方的话来说&#xff0c;Combine 是: a declarative Swift API for processing values over time. Combine 是 Apple 用来实现函数响应式编程的库&#xff0c; 类似于 RxSwift。 RxSwift 是 ReactiveX 对 Swift 语言的实现。 Combine 使用了许多可以…

8868助力意甲尤文图斯足球俱乐部 寻求冬窗阵容补强

意甲的尤文图斯足球俱乐部是8868合作体育球队之一&#xff0c;根据意大利天空体育的消息&#xff0c;尤文图斯希望在冬季转会窗口通过引援来加强球队的实力&#xff0c;特别是在中场位置。但尤文必须卖掉一部分人来筹集资金&#xff0c;而伊林就在名单的最前面。 尤文想要提高自…

Android.mk 语法详解

一.Android.mk简介 Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成&#xff08;exe&#xff0c;so&#xff0c;a&#xff0c;jar&#xff0c;apk&#xff09;等文件。 二.Android.mk编写 分析一个最简单的Android.mk LOCAL_PATH : $(call my-dir) //定义了…

常见web安全漏洞和解决思路

一、常见安全漏洞 服务器类安全漏洞&#xff1a; 服务器含服务器软件类型较多&#xff0c;此次不再一一列举&#xff1b; WEB访问类安全漏洞&#xff1a; XSS漏洞检测 (key: xss) SQL 注入检测 (key: sqldet) 命令/代码注入检测 (key: cmd-injection) …

解决计算机“缺失ffmpeg.dll”报错?修复ffmpeg.dll文件方案

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“ffmpeg.dll丢失”。ffmpeg.dll是FFmpeg多媒体框架中的一个重要组件&#xff0c;它负责处理音频和视频的编解码。当打开某些软件时&#xff0c;如果系统找不到该文件&#xff0c;就会出现这…

每天分享5款软件,让大家工作学习更顺心

​ 快乐不是在于拥有什么,而在于我们和别人分享什么。每天分享五款工具&#xff0c;让大家工作办公更顺心就是我最大的快乐。 1.图片放大增强——Upscayl ​ Upscayl是一款图片放大增强软件&#xff0c;可以利用人工智能技术将低分辨率的图片转换为高分辨率的图片&#xff0c…

Java应用中各类环境变量的优先级及最佳实践

1.引言 Java应用程序的开发和部署过程中&#xff0c;合理利用各类环境变量是关键之一。不同类型的环境变量&#xff0c;如系统环境变量、进程级环境变量、Java启动参数设置的系统属性以及Spring Boot配置文件中的环境变量&#xff0c;它们之间存在优先级差异。 深入理解这些环…

【C生万物】C语言数据类型、变量和运算符

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

【日志记录】——单片机可执行文件合并

一&#xff1a;需求场景 现在有一片单片机&#xff0c;执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产时有以下问题&#xff0c;由于要通过jlink烧录boot&#xff0c;然后上电启动boot&#xff0c;通过boot烧录初始化程序&#xff0c;过程过于复杂&#xff0…

Java Map HashMap集合的基本操作与使用

Java Map HashMap集合的基本操作与使用 package com.zhong.mapdemo.map;import jdk.jfr.Description;import javax.swing.plaf.synth.SynthOptionPaneUI; import java.util.*;/*** ClassName : MapDemo* Description : map 的基本使用* Author : zhx* Date: 2024-02-07 10:29*/…

jsp课程管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 课程管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

[每周一更]-(第85期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要&#xff1a; 应用&#xff1a; 利用NLP技术从医疗文档中自动生成病历摘要&#xff0c;以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类&#xff1a; 应用&#xff1a; 使用文本分类技术自动分类法律文件&#xf…