QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

微博评论高性能高可用计算架构设计

踩着太阳看日出

架构训练营

linux之yum源设置代理

入门小站

Linux

通用池化框架commons-pool2实践

FunTester

微博评论高性能高可用计算架构

Trent

高可用 架构设计 高性能 训练营

工业金属零部件质检解决方案详解,让AI质检一步到位!

百度开发者中心

架构实战营作业五

库尔斯

#架构实战营

为什么你的maven打包老是出现问题

ZuccRoger

5月月更

时序数据库在智慧用电领域的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

下个牛市,Web3世界的龙头项目PlatoFarm能否踏足山巅

BlockChain先知

【LeetCode】删列造序Java题解

Albert

LeetCode 5月月更

【愚公系列】2022年05月 二十三种设计模式(十二)-代理模式(Proxy Pattern)

愚公搬代码

5月月更

元宇宙参与指南——如何融入元宇宙建设?

CECBC

架构实战营 - 模块五 - 作业

michael

架构实战营 #架构实战营 「架构实战营」

百度智能云特色城市业务指挥平台,助力城市管理更智能

百度开发者中心

Maven 简介及安装

Emperor_LawD

maven 5月月更

在线TSV转XML/JSON工具

入门小站

工具

守护数据安全,天翼云是认真的!

天翼云开发者社区

云计算 云服务 数据安全

微博评论高性能高可用计算架构设计分析

锎心😌😌😌

区块链+供应链:共建全国统一大市场

CECBC

学生管理系统(1)简介

5月月更

微博系统中”微博评论“的高性能高可用计算架构

凯博无线

在线Base64编码加密解密还原工具

入门小站

工具

面试还不会Spring?阿里P8总结的100道面试解析,让你实锤面试官

Java浪潮

Java 编程 架构

基于 Agora SDK 实现 Windows 端的多人视频互动(基于3.6.2版本)

声网

音视频 sdk

面试答不上Java并发编程?阿里P8提供的27道并发面试解析,请查收

Java浪潮

Java spring 架构 编程语言

Redis「1」流水线、事务、Lua 脚本

Samson

Redis 核心技术与实战 5月月更

存在负权边,Bellman-Ford

工程师日月

算法 5月月更

druid 源码阅读(三)初始化连接池(2)

爱晒太阳的大白

5月月更

模块五

ASCE

设计微博系统中”微博评论“的高性能高可用计算架构

流火

再谈JavaScript 中的对象解构

devpoint

JavaScript ES6 5月月更 赋值解构 对象操作

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