【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

xUnit.net:下一代单元测试框架?

  • 2007-09-27
  • 本文字数:1397 字

    阅读完需:约 5 分钟

NUnit 的创造者 Jim Newkirk 公布了一个新的单元测试框架,叫做 xUnit.net 。这个以 NUnit 接班人自许的新框架打算消除 NUnit 的错误和缺点,并打算在框架中加入一些最佳实践和扩展能力。

Jim Newkirk 和 Brad Wilson 这两位 xUnit.net 的创造者,从 NUnit 和其他单元测试框架的经验中总结出来以下改进:

  • 为每个测试方法产生一个对象实例
  • 取消了 [SetUp] 和 [TearDown]
  • 取消了 [ExpectedException]
  • 类似于 Aspect 的功能
  • 减少了自定义属性(Attribute)的数目
  • 采用泛型
  • 匿名委托
  • 可扩展的断言
  • 可扩展的测试方法
  • 可扩展的测试类

xUnit.net 减少了属性(Attributes)的数量,属性被用来控制测试和测试的执行过程。其中有个 [Test] 属性用来标出测试方法。跟 NUnit、 MbUnit MSTest 不同,测试类并没有任何标志。xUnit.net 直接在程序集中查找所有公开类的全部公开测试方法。[SetUp] 和 [TearDown] 已经被抛弃,因为它们一般被认为是坏的实践:

xUnit.net 团队觉得每项测试分别执行 setup 和 teardown 会产生难以理解与除错的测试代码,并且常常导致每一项测试执行之前都要运行一些不必要的代码。

Jim Newkirk 曾经在博客上撰文说明为何不应在 NUnit 中使用 SetUp 和 TearDown

我对 SetUp 的不满来自两个方面。第一也是主要的问题是,在我阅读每个测试的时候,我都不得不瞥一眼 BeforeTest(),看看在测试中用到的那些值。如果有 TearDown 方法的话就更糟,这下我要看 3 个方法。第二个问题是 BeforeTest() 为所有的测试初始化成员变量,这会让 BeforeTest() 复杂化而且违反了单一职责原则。

原先 [ExpectedException] 属性被用来声明希望测试代码抛出的异常,它已被 Assert.Throws 断言取代。测试集(TestFixture)由 ITestFixture 接口标出,接口里面有两个方法:BeforeAllTests() 和 AfterAllTests()。测试超时和暂时跳过某些测试是通过 [Test] 属性的参数来实现的,并没有单独为此定义属性。MbUnit 里面非常受欢迎的 [RowTest] 和 [Row] 测试模式也被包括了进来,由 [Theory] 和 [DataViaXxx] 实现:

xunit.extensions.dll 里附带了对数据驱动测试的支持,被称为 Theory。用 [Theory](代替 [Test])来标记你的测试,再标记上其中一个 [DataVia…] 属性,用来指出数据的来源。

xUnit.net 中的断言的数量也减少了。任何可用基本断言实现其功能的断言都被放弃。另外“is”和“are”(如“AreEqual”或“IsEmpty”)前缀也被去除。xUnit.net 网站上提供了 NUnit、MbUnit、MSTest 与 xUnit.net 的属性和断言的详细对比

xUnit.net 还用上了.NET 2.0 和 3.5 的新语言特性。它支持使用泛型,因此可以在比较语句中保证类型安全,比如 Equal 和 NotEqual 断言。取代了 [ExpectedException] 属性的 Assert.Throws() 方法支持匿名委托和 lambda 表达式,因此代码更加紧凑也更具可读性:

Assert.Throws (delegate { operation(); }); // .NET 2.0
Assert.Throws (() => operation()); // .NET 3.5

测试类、测试方法和断言都很容易扩展。IComparer接口让用户能够扩展 Equal、NotEqual 之类的功能。xUnit.net 支持创建测试模式,测试模式控制着测试如何调用和执行。最后,用户还可以通过扩展现有的 TestRunner 或者自己新建 TestRunner 来控制测试套件和测试类的执行。

xUnit.net 的创造者们显然认为他们这个开源框架会成为 NUnit 的接班人。而 Roy Osherove 觉得 xUnit.net 还不够成熟,未来还有些疑问。

查看英文原文: xUnit.net - Next Generation of Unit Testing Frameworks?

2007-09-27 01:095518
用户头像

发布了 225 篇内容, 共 60.8 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

国内IT市场还有发展吗?有哪些创新好用的IT运维工具可以推荐?

行云管家

云计算 多云管理 IT运维 云管理

IDO预售DAPP系统开发(NFT挖矿)

薇電13242772558

dapp

兆骑科创双创服务平台,创业赛事活动,投融资对接平台

兆骑科创凤阁

浅聊组合函数

掘金安东尼

前端 函数编程 8月月更

面试SQL语句,学会这些就够了!!!

程序员猪小哼

sql 实用SQl语句

Python字体反爬之乐居字体反爬,一文看懂,一文学会

梦想橡皮擦

Python 爬虫 8月月更

浅析PM2实用入门指南

青年码农

Node pm2

开源一夏 | 不会吧,十分钟就能上手Prometheus与Grafana监控SpringBoot项目

知识浅谈

开源 8月月更 SpringBoot实战

Kubernetes资源编排系列之三: Kustomize篇

阿里云大数据AI技术

运维‘

语音直播系统——做好敏感词汇屏蔽打造绿色社交环境

开源直播系统源码

软件开发 语聊房 直播系统源码 语音直播系统

中科驭数等单位牵头发布行业首部DPU评测方法技术白皮书

硬科技星球

一文搞懂│php 中的 DI 依赖注入

设计模式 依赖注入 8月月更 高级编程

兆骑科创创业赛事活动路演,高层次人才引进平台

兆骑科创凤阁

华为研究院19级研究员几年心得,终成趣谈网络协议文档,附大牛讲解

冉然学Java

数据库 编程 微服务 网络协议 java\

二极管及其应用

厉昱辰

电子技术 8月月更

Apache APISIX 2.15 版本发布,为插件增加更多灵活性

API7.ai 技术团队

开源 后端 API网关 APISIX 网关

并发模型和I/O模型介绍

C++后台开发

后端开发 I/O模型 C/C++后台开发 C/C++开发 并发模型

快速搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型

知识浅谈

开源 8月月更

太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记

冉然学Java

编程 算法 排序 java\ 数据结构与算法、

史上最全!47个“数字化转型”常见术语合集,看完秒懂~

优秀

数字化转型 数字化业务转型

这几年让你大呼惊人的AI应用,都离不开这项技术

小红书技术REDtech

人工智能 自然语言处理 nlp 自然语言 自然语言理解

《数字经济全景白皮书》银行业智能风控科技应用专题分析 发布

易观分析

金融 银行 数字经济全景白皮书

基于深度学习的图像检索方法!

Geek_e369a5

图像搜索 图像检索

玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据

TDengine

数据库 tdengine 时序数据库

想做好分布式架构?这个知识点一定要理解透彻

王小凡

Java 程序员 分布式 高并发

大咖说·图书分享 | Serverless工程实践:从入门到进阶

大咖说

Serverless 工程实践

绝对最直白的MySQL MVCC机制总结,免费拿走

知识浅谈

开源 8月月更

Mysql 基本操作指南之mysql查询语句

六月的雨在InfoQ

8月月更

开篇-开启全新的.NET现代应用开发体验

MASA技术团队

.net 云原生 后端

AI+BI+可视化,Sugar BI架构深度剖析

百度Geek说

架构 数据

2022年值得尝试的7个MQTT客户端工具

EMQ映云科技

物联网 IoT mqtt 客户端 8月月更

xUnit.net:下一代单元测试框架?_研发效能_Hartmut Wilms_InfoQ精选文章