10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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:095948
用户头像

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

关注

评论

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

搞一下CP AUTOSAR 入门 | 01 CP AUTOSAR Overview

SOA开发者

防火防盗防内卷!阿里的24W字Java面试复盘指南,在Github上已标星98K+

Java 架构 面试 程序人生 编程语言

基于星环大数据云平台 TDC 的一站式数据湖解决方案

星环科技

大数据 云平台

企业如何通过图数据库及知识图谱形成业务壁垒

星环科技

星环ArgoDB+英特尔第三代至强=分布式闪存数据库“蜕变”

星环科技

数据库

AUTOSAR诞生的背景及其目的

SOA开发者

这份阿里P8手写的JDK发展史源码剖析手册,竟获GitHub热门榜第一

Java 架构 面试 程序人生 编程语言

常用的 分布式事务 都有哪些?我该用哪个?

Java 程序员 面试 后端 计算机

恒源云(GpuShare)_新功能制霸,信息量有点大

恒源云

必须得会的一些汽车ECU研发基础 --ECU硬件概念2

SOA开发者

不愧是阿里高工出产的《Java面试手册》,实战命中率竟高达“80%”

Java 架构 面试 后端

大数据presto作业

Clarke

开发上云,化繁为简 | CIF 论坛精彩看点

CODING DevOps

腾讯云 DevOps 云原生 云开发 CIF

百度飞桨PaddleRobotics新升级!一套强化学习算法解决四足机器人多地形行走难题

科技热闻

玩转手工测试之百度客户端产品手工测试提效实践

百度开发者中心

最佳实践 方法论 手工测试

未来5年,虚拟化5个非常有前景的就业方向

hanaper

最新!Apache APISIX 通过中国信通院 “可信开源项目” 认证

API7.ai 技术团队

Apache 开源社区 api 网关 APISIX 信通院

后端选择 java, 还是 python?

cdhqyj

财经大课:从效率公平看“共同富裕”

石云升

学习笔记 9月日更 共同富裕

低代码的自动化工作流靠谱吗?对企业有何帮助?

优秀

自动化 低代码

2021 DEMO CHINA创新中国总决赛峰会闭幕,光子晶体斩获2021 DEMO GOD

创业邦

共生、互生、再生——英特尔与合作伙伴携手共建未来城市数字新基建

科技新消息

软件对智能汽车的影响

SOA开发者

高并发场景下的会话服务数据读写设计思路(附具体实施方案)

融云 RongCloud

数据库 缓存 即时通讯 IM 低时延

Python代码阅读(第29篇):使用初始化种子和迭代函数生成列表

Felix

Python 编程 Code Programing 阅读代码

做等保测评找哪家公司好?怎么选择?

行云管家

网络安全 等级保护 等保测评

物超所值!5.7w字在GitHub标星120K的Java面试知识点总结

Java 架构 面试 程序人生 编程语言

《数据安全法》实施后,企业如何依法进行数据安全加固及创新

星环科技

数据安全 数据安全法

技术干货 | Native 页面下如何实现导航栏的定制化开发?

蚂蚁集团移动开发平台 mPaaS

大前端 H5 移动开发 mPaaS

「可视化助力」,医疗进步无限可能

ThingJS数字孪生引擎

大前端 物联网 可视化

Alibaba内部的10w字Java高频面试手册遭人恶意泄露

Java 面试 程序人生 编程语言 金九银十

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