写点什么

NUnit 3 引入扩展能力与并行执行特性

  • 2015-12-18
  • 本文字数:2176 字

    阅读完需:约 7 分钟

.NET 测试框架 NUnit 最近推出了版本 3 ,其中引入了并行执行与扩展能力。Charlie Poole 作为 NUnit 的维护者已超过 10 年了,InfoQ 与 Charlie 进行了一次访谈,以了解这次发布的更多内容。

InfoQ:在经过了两年时间的开发,推出了 5 个 alpha 版本,5 个 beta 版本和 2 个发布候选版本之后,最终版本终于在上个月正式发布了。作为一个主要的版本更新,新版本的主要目标有哪些?

Charlie Poole:在回答这一问题之前,我首先必须说的是,这个版本的开发时间比预想中长了很多,尤其是基于已发布的 alpha 和 beta 版本来看。我在 2007 年于马德里举办的 Mono Summit 会议上第一次向公众透露了关于 NUnit 3.0 的想法。Mono 的开发者们确实是非常优秀的听众,他们为我提出了许多优秀的点子。平心而论,在当时看来,Mono 的开发者们比起整个.NET 社区更能够拓展他们的思维。

NUnit 如今已经经历了十五个年头了。基本上,这次发布的目标是为了让 NUnit 为今后 10 年的发展做好准备。在 2002 年时推出的 NUnit 2.0 经过了全部的重写,而新版本则是我们第二次经过代码的全部重写。所谓的主要版本,就是要这样剧烈的改变。

为了让 NUnit 能够继续发展,在我看来,它必须变得更为模块化。我们希望它能够变成一个真正的测试平台,而不仅仅是一个框架而已。但同时,如果用户依然只想把它当做一个框架使用,他们还是能够这么做。这也意味着,我们必须添加一些特性,以支持更多类型的测试,而不仅仅是单元测试而已。3.0 版本中包含了非常出色的特性集,不过我认为以上这些只是这一版本中全部变更的冰山一角而已。

如今,3.0 的生产版本已正式亮相了,我们将以更快的速度发布特性,正如我们过去十年间对 NUnit V2 所做的更新一样。实际上,我们刚刚才发布了 NUnit 3.0.1,这是一个专门修复 bug 的版本。

InfoQ:对于这次发布的版本,有哪些特性是使用者最希望看到的?

CP:其中之一是并行测试执行,它通过属性进行控制。我们支持两种级别的并行性:在独立的进程中并行执行多个程序集,或是在同一个进程中执行多个线程。这两种级别的并行各有适合的应用场景。

另一个主要特性是 NUnit 现在提供了一个 TestEngine,并提供一套已发布的 API,任何人都可以在自己的程序中调用它以运行测试。这一特性在过去是不存在的,如果你要在 NUnit 中以编程的方式运行测试,必须要使用内部类。而这些内部类在每次发布中都可能会产生变化,这对于第三方测试执行器的开发者来说无疑是加大了开发的难度。

第三个特性是关于扩展能力。NUnit V2 中引入了一种“NUnit 插件”机制,但编写这种插件非常复杂。NUnit 3.0 去除了这一机制,并提供另两种级别的扩展能力:

  1. 第一种方式是创建一个新的框架级别的属性,并实现某些已定义的接口,以获得某种期望的行为。顺便说一句,这种方式受到了 MbUnit 的启发,好点子的共享正是开源项目进行创新的方式之一。
  2. 第二种方式是为引擎创建一个扩展,这种方式能够更进一步扩展 NUnit 的能力。举例来说,某个引擎驱动扩展允许在 NUnit 3.0 中执行 NUnit V2 的测试。如果你愿意,你还可以为 xUnit、msTest 甚至是 junit 编程扩展。在今后的发布中,我们还将利用这一功能实现远程或在设备中运行测试。

InfoQ:在 NUnit 3 中支持哪些新的平台?

CP:我们为这一框架打造了一个可移植的库,可以在.NET 4.5、.NET Core(包括 Win 10 以上版本的统一 Windows 应用,或 DNX Core 5 以上版本)、Windows 8、Windows Phone 8(基于 Silverlight)、统一应用(包括 Windows Phone 8.1 以上版本,或 Windows 8.1 以上版本),以及 Xamarin(包括 MonoTouch、MonoAndroid 以及 Xamarin iOS 统一应用)。

当然,我们也将继续支持各种遗留平台,包括.NET 2.0、Silverlight 和.NET Compact Framework 3.5。不过,我们最终还是取消了对.NET 1.1 和.NET CF 2.0 的支持。

InfoQ:哪一项成就是最令你感到骄傲的?

CP:最令我感到骄傲的就是能够让 NUnit 得以继续发展!在 2005 年前后,就有人开始预测 NUnit 将会消亡。最主要的因素就是微软推出了一个“官方”的测试框架,它宣称能够统一当时所有的开源单元测试项目。结果这当然没有成真,而对于 NUnit 的死亡预测反倒让我们产生了更大的创新动力,尤其是设计出了 NUnit 测试开发平台,即 NUnit 3.0。

第二大成就则是这一项目找到了大量的参与者、贡献者和社区成员,并从他们那里获得了大量的支持。作为一名技术人员,这种来自于社区的贡献是我始料未及的,这令我对于促成这一项目的发展感到骄傲。如果 NUnit 能够继续发展至 2020 年之后,届时我就将要 70 多岁了,恐怕已无力继续它的开发,因此我很高兴有其他贡献者能够让它保持继续发展。我要特别提到 Rob Prouse,他如今已是这个项目在 GitHub 上的共同所有人,并且已经成功地管理了多次发布。

InfoQ:还有哪些想要补充的吗?

``> CP:在 2002 年时,我出于工作的目的需要寻找一个开源的测试项目。最终,我基本认定了 NUnit,因为我与开发团队建立了良好的关系。最终我也加入了这一项目,并且如你所见,我是那批开发者中最后一个还在继续维护它的人。幸运的是,新人在陆续地加入这一项目,这样在我离开时也能够放心地把项目交给他们了。

NUnit 的源代码可以在 GitHub 上找到,其中也包含了 NUnit 3 的文档,包括一篇升级指南

查看英文原文: NUnit 3 Brings Extensibility and Parallel Execution: Interview with Charlie Poole

2015-12-18 18:005777
用户头像

发布了 428 篇内容, 共 167.2 次阅读, 收获喜欢 35 次。

关注

评论

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

go-admin开源项目分析-1[安装、配置、启动]

happlyfox

学习 3月日更 Go 语言 go-admin

Python OpenCV 图像标记,取经之旅第 12 天

梦想橡皮擦

3月日更

畅玩国服LOL?MacBook M1 Windows虚拟机体验

Zhendong

arm MacBook m1

火爆全网!2021年最新发布Java面试清单(九大技术点)

比伯

Java 程序员 架构 程序人生 架构师

设计与思考,关于资源和生命周期(三)

程序员架构进阶

设计模式 架构设计 28天写作 3月日更 池化技术

Redis - AOF

insight

redis 3月日更

隐式等待、显示等待和强制等待?

Geek_6370d5

小白也能看懂的锁升级过程和锁状态

牧小农

乐观锁 悲观锁 锁升级

架构师知识笔记2

felix徐

程序思维与架构思维

Simon

架构实战营

Redis 内存碎片清理

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

mysql 检索分享上篇

new life

Java面试:阿里公开内部P7架构师(Java)成长路线图,满满的干货

Java架构追梦

Java 阿里巴巴 架构 面试 P7岗

Wireshark数据包分析学习笔记Day24

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

一篇文章让你彻彻底底理解 I/O 多路复用

Java 程序员 架构 面试 计算机

华为 IS-IS防环、泄露

艺博东

网络

极客时间·产品训练营·第八周作业

二大爷

极客大学产品经理训练营

Go语言的初体验

Phoenix

Go 语言

音视频开发经验之路【一】Android中如何实现无缝切换播放源

鱼哥

音视频

音视频开发经验之路【二】ijkplayer实际开发中遇到的问题总结

鱼哥

音视频

蚂蚁开源增强版 SpringBoot,都有高级特性?

Java小咖秀

开源 springboot 蚂蚁金服 SOFA

Spring Boot Feign 使用与源码学习

Yangjing

Feign Spring boot Feign 源码解读

面试三轮我倒在了一道sql题上——sql性能优化

牧小农

MySQL 数据库 面试 索引 索引优化

(Day31) 变革流程的流程

mtfelix

28天写作 bewriting

阿里二面,面试官居然把 TCP 三次握手问的这么细致

鞋子特大号

面试 TCP 三次握手 四次挥手

Redis - RDB

insight

redis 3月日更

LeetCode链表专题01: 反转链表

小马哥

Java 链表 LeetCode 数据结构与算法 七日更

看完这篇,再也不怕面试官问我线程池了

牧小农

多线程 高并发 线程池 阻塞队列 拒绝策略

一线大厂软件测试流程(思维导图)详解

程序员阿沐

编程 程序员 软件测试 测试工程师 测试流程

Go Modules 常见使用陷阱

Rayjun

go modules Go 语言

初识Golang之条件语句

Kylin

基础语法 3月日更 Go 语言

  • 扫码加入 InfoQ 开发者交流群
NUnit 3引入扩展能力与并行执行特性_.NET_Pierre-Luc Maheu_InfoQ精选文章