技术速递|MSTest SDK 简介 – 改进的配置和灵活性

作者:Marco Rossignoli & Amaury Levé
排版:Alan Wang

我们很高兴地宣布,基于 MSBuild Project SDK 系统构建的全新 MSTest SDK已推出。它旨在通过合理的默认值和灵活的选项使项目配置更加容易,从而为您提供更好的 MSTest 测试体验。

这种新体验是建立在最近推出的 MSTest 运行程序的基础上(请查看公告),以进一步提高您的体验。这个新的运行程序是一种轻量级、可靠且高性能的运行 MSTest 测试的方式,作为 MSTest.TestAdapter NuGet 包的依赖项发布。该运行器及其扩展由多个 NuGet 包组成,以提供可扩展、灵活且可配置的测试运行体验。然而,可定制性可能会导致许多问题:推荐的扩展是什么?正确的默认值是什么?如何对齐版本?这就是 MSTest SDK 的用武之地。

MSTest SDK 入门

开始使用新的 MSTest SDK 非常简单。只需创建一个 MSTest 项目(或更新现有的 MSTest 项目)并将 .csproj 文件的内容替换为以下内容:

<Project Sdk="MSTest.Sdk/3.3.1"><PropertyGroup> <TargetFramework>net8.0</TargetFramework></PropertyGroup><!-- 用于测试的其他属性和项目。-->
</Project>

请注意,您可以使用 MSTest 支持的任何目标框架(即 net462 及更高版本)。

MSTest SDK 的优点

这个新的 SDK 为您和您的测试项目提供了许多优势,例如:

  • 更好的默认值
  • 简化使用
  • MSTest 运行程序的可扩展性
  • 更容易选择加入新功能(例如本机 AOT 测试)

更好的默认值

使用 MSTest SDK 时,您将与主要类型的应用程序(例如 ASP.NET Core、Razor、Windows 桌面)提供的模式保持一致。它将使用 MSTest 团队为您的测试项目提供的默认建议。

例如,我们在 v3.2 中引入了一些 MSTest 静态代码分析器,但这些分析器是在新软件包中定义的,默认情况下不可用,因此您必须手动将此包添加到测试项目中。相反,通过使用 MSTest SDK,您只需更改版本即可获得所有新的默认值。

我们想要指出的是,在选择默认值并在版本之间更新它们时,我们会严格遵循语义版本控制原则(请参阅有关语义版本控制的文章),以便保证您可以理解且轻松的更新。

更轻松地使用 MSTest Runner 扩展

除了 MSTest 运行程序之外,我们还提供了一组扩展,您可以将它们安装为 NuGet 包以提升您的测试体验。为了帮助您选择正确的默认值、正确的扩展,并确保扩展之间能够轻松更新和调整,我们引入了“配置文件”的新概念。我们目前提供以下 3 个配置文件:Default、AllMicrosoft 和 None,您可以配置和进一步自定义。我们推荐使用默认配置文件。

默认配置文件包含:

  • 微软代码覆盖率
  • TRX 报告支持

从任何配置文件开始,您可以通过向项目添加一些额外属性来手动选择加入或去除任何附加扩展,这些属性将遵循规则 Enable[NugetPackageNameWithoutDots]。例如,要向默认配置文件添加故障转储支持,您只需添加以下 MSBuild 属性 EnableMicrosoftTestingExtensionsCrashDump 并将其设置为 true。

<Project Sdk="MSTest.Sdk/3.3.1"><PropertyGroup><TargetFramework>net8.0</TargetFramework><!-- 在默认配置文件之上启用 Microsoft.Testing.Extensions.CrashDump 包 --><EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump></PropertyGroup><!-- 用于测试的其他属性和项目。-->
</Project>

您可以参考我们的 MSTest SDK 文档以获取有关这些配置文件及其默认值的更多信息。

测试 Native AOT

MSTest 是第一个支持在 Native AOT 模式下运行测试的 .NET 测试框架和运行器。使用 MSTest SDK 时,我们将自动检测您是否要发布到 AOT,并透明地交换所有必需的测试包和配置以匹配此专用模式。

有关使用 Native AOT 进行测试的更多信息,请参阅此博文:使用 Native AOT 进行测试。

不使用 MSTest SDK 的项目设置示例:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net8.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><OutputType>exe</OutputType><PublishAot>true</PublishAot></PropertyGroup><ItemGroup><!-- 实验性 MSTest 引擎和源代码生成器,闭源,与我们的扩展具有相同的 Microsoft 测试平台工具许可证。--><PackageReference Include="MSTest.Engine" Version="1.0.0-alpha.24163.4" /><PackageReference Include="MSTest.SourceGeneration" Version="1.0.0-alpha.24163.4" /><PackageReference Include="Microsoft.CodeCoverage.MSBuild" Version="17.10.4" /><PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.4" /><PackageReference Include="Microsoft.Testing.Extensions.TrxReport" Version="1.0.2" /><PackageReference Include="Microsoft.Testing.Platform.MSBuild" Version="1.0.2" /><PackageReference Include="MSTest.TestFramework" Version="3.2.2" /><PackageReference Include="MSTest.Analyzers" Version="3.2.2" /></ItemGroup><ItemGroup><ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /></ItemGroup><ItemGroup><Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" /></ItemGroup></Project>

使用 MSTest SDK 进行相同的项目设置:

<Project Sdk="MSTest.Sdk/3.3.1"><PropertyGroup><TargetFramework>net8.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><PublishAot>true</PublishAot></PropertyGroup><ItemGroup><ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /></ItemGroup><ItemGroup><Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" /></ItemGroup></Project>

下一步计划?

虽然 MSTest SDK 风格仍在开发中,但它已经成为我们即将推出的演变和功能的基石。我们强烈建议所有 MSTest 用户过渡到此 SDK 样式,该样式将成为我们使用 .NET 9 的 MSTest 项目模板的标准。

我们还计划在即将发布的版本中添加更多场景,例如 Playwright 和 WinUI。

我们欢迎任何关于如何进一步改进和完善它的反馈,以确保它符合用户的不同需求和期望。分享反馈的最佳方式是在我们的 microsoft/testfx 存储库中报告问题。

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

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

相关文章

javabean技术四种方法

1.form表单 index页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!-- jsp页面输入三角形三条边&#xff0c;输出周长和面积 --><!-- 实例化对象bean的名字可以随便取名&#xff0…

人工智能与汽车行业的定量分析研究

人工智能与汽车行业的定量分析研究 摘要&#xff1a;[论文摘要] 关键词&#xff1a;[论文关键词] 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入到各个行业领域&#xff0c;汽车行业亦不例外。AI与汽车行业的结合&#xff0c;不…

Nginx基本使用 反向代理与负载均衡

什么是Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。 其特点是占有内存少&#xff0c;并发能力强&#xff0c;nginx的并发能力在同类型的网页服务器中表现较好&#xff0c;而且几乎可以做到7*24不间断运行&#xff0c;即使运行数个月也不需要重新启动。 …

MP2110A Anritsu 安立 采样示波器 眼图设备 简述

MP2110A是一款集成了误码率测试仪&#xff08;BERT&#xff09;和采样示波器的一体化测量仪器&#xff0c;主要用于光学模块的误码率&#xff08;BER&#xff09;测量、眼图分析等评估操作。它支持从10G到800G的光学模块制造过程中的检测分91522。MP2110A内置4通道采样示波器&a…

MySQL从安装、配置到日常操作和管理的关键步骤

MySQL是一款广泛使用的开源关系型数据库管理系统&#xff0c;用于存储、管理、检索和处理数据。以下是一个详细的MySQL使用教程&#xff0c;包括安装、基本操作、数据管理、权限控制、备份与恢复等方面的内容&#xff1a; 一、MySQL安装 下载&#xff1a; 访问MySQL官方网站&a…

k8s部署jupyterlab,jupyterlab保存不了文件,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

磁盘分区以及MBR与GPT

磁盘分区以及MBR与GPT 磁盘分区的概念MBR&#xff08;Master Boot Record&#xff09;与GPT&#xff08;GUID Partition Table&#xff09;分区命令LinuxWindows 磁盘分区的概念 磁盘分区是将一个物理硬盘驱动器划分为多个逻辑部分的过程。每个分区可以看作是一个独立的硬盘&a…

ElasticSearch:查询操作合集

先看下我的数据&#xff1a; 1、查询所有文档&#xff1a; GET /cartest/_search或者 GET /cartest/_search {"query": {"match_all": {}} }2、匹配查询&#xff1a; match匹配类型查询&#xff0c;会把查询条件进行分词&#xff0c;然后进行查询&…

【树莓派】如何用电脑连接树莓派的远程桌面,灰屏解决

要使用VNC桌面连接到树莓派&#xff0c;你需要确保已经安装并启动了VNC服务器。以下是连接到树莓派的步骤&#xff1a; 在树莓派上启动VNC服务器&#xff1a; 打开终端或SSH连接到你的树莓派。输入以下命令以安装RealVNC的VNC服务器&#xff1a;sudo apt update sudo apt insta…

PLSQL数据库

目录 什么是PLSQL数据库 PL数据库的实现方法 PL数据库的基本语法 1.作用 2.语法 3.赋值输出 4.引用 5.异常处理 6.if 判断 7.loop循环 8.while循环 9.for循环 10.游标 11.参数游标 12.索引 13.分区表 什么是PLSQL数据库 PL/SQL&#xff08;Procedure Language/…

微前端通信机制及其实现

微前端通信机制是指在微前端架构中&#xff0c;不同的微应用之间进行通信的方式和机制。微前端通信机制的实现可以通过以下几种方式&#xff1a; 事件总线&#xff08;Event Bus&#xff09;&#xff1a;微前端架构中的主应用可以创建一个事件总线&#xff0c;用于发布和订阅事…

【C++航海王:追寻罗杰的编程之路】C++11(二)

目录 C11(上) 1 -> STL中的一些变化 2 -> 右值引用和移动语义 2.1 -> 左值引用和右值引用 2.2 -> 左值引用与右值引用比较 2.3 -> 右值引用使用场景与意义 2.4 -> 右值引用引用左值及其更深入的使用场景分析 2.5 -> 完美转发 C11(上) 1 -> STL…

为什么要建设数字化校园?

数字化校园的建设能够使用户能够随时随地的在有互联网的地方获取到校园的信息&#xff0c;而且由于这些信息都是有校园的管理部门发布的&#xff0c;所以这样就能保证信息的权威性。数字化校园平台还能让学校内部建立起相对独立的网络体系&#xff0c;能有效的消除“信息化孤岛…

Leetcode 3121. Count the Number of Special Characters II

Leetcode 3121. Count the Number of Special Characters II 1. 解题思路2. 代码实现 题目链接&#xff1a;3121. Count the Number of Special Characters II 1. 解题思路 这一题算是一个分类讨论的问题吧&#xff0c;我们只需要对每一个字符考察其前序当中所有出现过的字符…

Qt实现XYModem协议(四)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据&#xff0c;并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

Leetcode 4.21

1.罗马数字转整数 用unordered_map去存罗马数字对应的数值&#xff0c;分情况讨论&#xff0c;把所有情况都列出来即可 class Solution { public:unordered_map<char, int> mp {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000}};int romanToInt(string s)…

Kubernetes TDengine 系列|安装 TDengine 的 Grafana 插件|Grafana监控TDengine数据

为了让Grafana 能够监控到TDengine 数据&#xff0c;快速集成搭建数据监测报警系统&#xff0c;所以直接安装TDengine 插件。 目录 一、安装 TDengine 的 Grafana 插件1、下载TDengine grafana插件2、解压到指定目录3、配置未签名插件 二、配置数据源&#xff0c;简单查询TDen…

【已解决】VMware虚拟机中出现无法将“iso文件”当做CD-ROM映像进行连接:找不到该文件的错误

报错 在VMware上运行虚拟机时报错&#xff1a;VMware虚拟机中出现无法将“iso文件”当做CD-ROM映像进行连接&#xff1a;找不到该文件的错误 原因分析 找不到这个iso文件了&#xff0c;检查文件位置 解决方案 找到iso文件&#xff0c;然后在VM中编辑虚拟机中这个文件的位置…

算法:堆(优先队列)

堆&#xff08;优先队列&#xff09;分为最大堆和最小堆。 python实现 class HEAPQ:# 最小堆def __init__(self, l):self.l lself.build()def build(self):n len(self.l)end n // 2for i in range(end, -1, -1):self.update(i)def update(self, i):l self.ln len(l)idx …

前端点击地图上的位置获取当前经纬度

地图封装组件 <template><div id"container"></div> </template> <script>import AMapLoader from amap/amap-jsapi-loader;export default {name: "Mapview",props:{mapinfo:{type:Object,default:function(){return {}}}…