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

用命令行执行 .NET 单元测试时,如何仅执行符合某些条件的单元测试

本文介绍使用 dotnet test 命令进行单元测试的时候,过滤出被测项目中的一部分测试出来,仅测试这一部分。


@TOC

背景

建一个 .NET Core 的单元测试项目,例如项目名字是 Walterlv.Demo.Tests。举例其中的一个测试类如下:

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Walterlv.Demo.Tests
{
    [TestClass]
    public class FooTest
    {
        [TestCategory("CategoryA")]
        [Priority(1)]
        [TestMethod]
        public void TestMethod1()
        {
        }

        [Priority(2)]
        [TestMethod]
        public void TestMethod2()
        {
        }
    }
}

使用 Visual Studio 的话,直接在测试资源管理器中点击运行全部测试,或者选择想要测试的项点运行所选测试即可。

Visual Studio 测试资源管理器

而使用 GUI 工具的话不利于 CI 集成和自动化测试,所以必然需要用到命令:

> dotnet test .\Walterlv.Demo.Tests.dll

有时为了调试方便或输出分类数据等,要求执行一部分单元测试,这就需要过滤了。dotnet test 的过滤使用 --filter 选项。

过滤

方法名

查找方法名包含某字符串的单元测试并执行:

dotnet test --filter TestMethod1

或者:

dotnet test --filter Name~TestMethod1

如果是排除某方法,则是:

dotnet test --filter FullyQualifiedName!=Walterlv.Demo.Tests.FooTest.TestMethod1

类名

查找类名等于某字符串的单元测试并执行:

dotnet test --filter ClassName=Walterlv.Demo.Tests.FooTest

类名必须包含命名空间,否则找不到。

分类与优先级

查找标记了 [TestCategory("CategoryA")] 的方法并执行单元测试:

dotnet test --filter TestCategory=CategoryA

查找标记了 [Priority(2)] 的方法并执行单元测试:

dotnet test --filter Priority=2

条件与或

条件或(|):

dotnet test --filter Name~TestMethod1|TestCategory=CategoryA

条件与('&'):

dotnet test --filter Name~TestMethod1&TestCategory=CategoryA

参考资料

  • Running selective unit tests - .NET Core - Microsoft Docs

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • WPF 中如何绑定附加属性?XAML 中记得加括号,C# 中记得不能用字符串
  • VSCode:当匹配到结果时,如何一次性全部选中操作(复制 删除)?
  • Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境
  • 在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用
  • 将 Windows Terminal 作为外部工具集成到其他工具 程序 代码中
  • Unity3D 入门:在 Visual Studio 里使用 Visual Studio Tools for Unity 全套工具
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • 如何在终端和 PowerShell 中将一个命令自动重复执行多次
  • WPF:无法对元素“XXX”设置 Name 特性值“YYY”。“XXX”在元素“ZZZ”的范围内,在另一范围内定义它时,已注册了名称。
  • 一点点从坑里爬出来:如何正确打开 WPF 里的 Popup?
  • Windows Linux 系统中获取端口被哪个应用程序占用
  • 设置用户无需密码自动登录到 Windows 系统
  • Apache的80端口被占用以及访问时报错403
  • Linux gpio口使用方法
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • pdf文件如何在线转换为jpg图片
  • vue 个人积累(使用工具,组件)
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 区块链共识机制优缺点对比都是什么
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 项目管理碎碎念系列之一:干系人管理
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ###C语言程序设计-----C语言学习(3)#
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C++)八皇后问题
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (已解决)什么是vue导航守卫
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)为C# Windows服务添加安装程序
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net MVC + EF搭建学生管理系统
  • .net 程序发生了一个不可捕获的异常
  • .net的socket示例
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • @angular/cli项目构建--http(2)
  • @Autowired @Resource @Qualifier的区别
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BJDCTF2020]The mystery of ip
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn