当前位置: 首页 > news >正文

技术速递|使用 MSTest.Analyzers 增强您的测试体验

作者:Jakub Jareš
排版:Alan Wang

MSTest 附带一组分析器,用于检查您的测试代码并指出常见的错误和陷阱。这些错误可能很微妙,并导致测试框架完全忽略您的测试。

我们从 3.2.0 版本就开始提供这些分析器了,但在最新的 3.5.1 版本中,我们添加了一些我们认为您不应错过的分析器。

遗漏的测试

一个常见问题是当您忘记在类上添加 [TestClass] 时。MSTest 将无法知道类中有测试,也不会运行它们:

public class MyTests
{[TestMethod]public async Task TestMethod1(){Assert.Fail();}
}

如果没有 MSTest.Analyzers,此代码在构建时不会出现警告或信息提示。运行测试时也不会出现测试失败的情况。由于类上没有 [TestClass] 属性,MSTest 会出于性能原因跳过整个类,并且您的测试将永远不会被找到。

但是使用分析器时您会在构建过程中收到一条信息提示:
在这里插入图片描述
我们建议将此信息提示升级为警告,甚至是构建错误。可以通过在 .editorconfig 文件中添加以下这行代码来实现:

[*.cs]
# MSTEST0030: Type containing '[TestMethod]' should be marked with '[TestClass]'
dotnet_diagnostic.MSTEST0030.severity = warning

在这里插入图片描述

为什么默认情况下这不是警告?

您可能会问为什么 MSTEST0030 默认是一条信息提示而不是默认的警告。原因是我们不能在 MSTest v3 中引入重大变更,而上述代码是一个常见的模式,用于从基类重用测试。

public class MyTestsBase
{[TestMethod]public async Task CommonTestMethod(){}
}
[TestClass]
public class MyTests : MyTestsBase
{[TestMethod]public async Task TestMethod1(){Assert.Fail();}
}

在上面的例子中,测试 CommonTestMethod 不会从 MyTestsBase 运行,因为它没有 [TestClass] 属性,但它会被继承到 MyTests 中并在那里运行。

我们不推荐这种模式。相反,如果您不想从中运行测试,我们建议始终用 [TestClass] 标记类,并将基类设为抽象类。

[TestClass]
public abstract class MyTestsBase
{[TestMethod]public async Task CommonTestMethod(){}
}
[TestClass]
public class MyTests : MyTestsBase
{[TestMethod]public async Task TestMethod1(){Assert.Fail();}
}

这种方法与上述方法类似,但您可以清楚地向分析器和测试框架说明 abstract 基类中包含共享逻辑,并且不应该自行运行。

AssemblyInitialize 格式错误

另一个有用的分析器的例子是修复 [AssemblyInitialize] 的签名,为程序集中的所有测试进行一次性设置。

我不知道您是否有同感,但我记不住这个方法的签名。当我出错时,我的测试根本就无法运行。这在 Visual Studio 中尤其令人烦恼,因为测试会一直保持蓝色,而我需要查看测试输出才能找到原因。

但是使用分析器,我可以轻松找出错误,甚至可以将自动修复应用于我的代码。

在这里我编写一个名为 Setup 的方法,VisualStudio 会在其下划线处添加警告,然后我按下 Ctrl+. 查看自动修复并应用它:

[TestClass]
public class MyTests
{[AssemblyInitialize]public void Setup(){}
}

在这里插入图片描述
将我的代码修复为测试框架可以识别的正确格式:

[TestClass]public class MyTests{[AssemblyInitialize]public static void Setup(TestContext context){}}

安装

开始使用 MSTest.Analyzers 的推荐方式是使用 MSTest nuget 包或 MSTest 项目 SDK(版本 3.2.0 或更新版本)。

https://learn.microsoft.com/dotnet/core/testing/unit-testing-mstest-getting-started

这些分析器还可以通过引用“MSTest.Analyzers” NuGet 包单独安装。

我们衷心建议所有使用 MSTest 的项目升级到 3.2.0 及更新版本,并启用这些分析器。

总结

本文中展示的两个分析器是我在日常工作中觉得最有用的分析器。但还有更多其他的分析器,例如:

  • MSTEST0003,确保您的测试方法具有正确的签名,例如是 public,而不是 async void。

  • MSTEST0001,建议启用测试并行化,因为我们已经看到多个测试基础通过这样做显著减少测试执行时间。

  • MSTEST0017,确保您以正确的顺序将参数传递给断言,以避免混淆测试失败消息。

还有 32 条规则,分为设计、性能和使用类别。帮助您编写格式正确、高性能且无错误的测试。

https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/overview

我们一直在寻找改进这些分析器或您缺少的新分析器的方法。我们欢迎您在我们的存储库 microsoft/testfx 上分享您的反馈、分析器的创意以及您的使用体验。


http://www.mrgr.cn/news/18252.html

相关文章:

  • 【html】新建一个html并且在浏览器运行
  • 【实战教程】用 Next.js 和 shadcn-ui 打造现代博客平台
  • 视频编码标准化组织介绍
  • 嵌入式OTG硬件电路分析
  • 使用神卓互联内网穿透开发支付宝支付回调环境(Java版)
  • 022集—— 字符串按ascii码转数字——C#学习笔记
  • dfs 解决 部分矩阵洪流/floodfill算法题(水流问题、扫雷游戏、衣橱整理、C++)
  • 【mysql】mysql目录结构和源码和mysql基础练习
  • 362_C++_异步添加到队列中后(添加队列的任务数量限制30个),采用定时执行的任务,一个个顺序执行队列中的任务
  • Fabric.js Canvas:核心配置与选项解析
  • 教学能力知识
  • 培训第四十一天(docker-compose一键部署项目,haproxy容器代理多个web或java容器)
  • [米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-25 RGB转HDMI显示方案
  • DASK==延迟对象delayed
  • 日常实习【面试记录】
  • [CyberSpace‘24] Crypto
  • 物联网之MQTT
  • Java中Object的常用方法
  • zeppline如何配置用户登陆
  • 0基础轻松玩转.NET Web API 8.0【CICD】项目实战