AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

keepalived实现双机热备

爱好编程进阶

Java 面试 后端开发

MySQL:从B树到B+树到索引再到存储引擎

爱好编程进阶

Java 面试 后端开发

SpringCloudRPC远程调用核心原理:FeignRPC动态代理实例创建流程

爱好编程进阶

Java 面试 后端开发

东方园林召开2022年度全员大会

科技大数据

CNCF生态蓝图的八个领域及路线图概述

穿过生命散发芬芳

4月月更

linux之read命令

入门小站

Mybatis延迟加载和查询缓存

爱好编程进阶

Java 面试 后端开发

SpringCloudRPC远程调用核心原理:feign

爱好编程进阶

Java 面试 后端开发

区块链交易所源码开发搭建,多种交易所系统开发

Geek_56201b

区块链 交易所开发 区块链交易所搭建

JVM基本概念

爱好编程进阶

Java 面试 后端开发

MQTT介绍及与其他协议的比较

爱好编程进阶

Java 面试 后端开发

spring boot 配置liquibase

爱好编程进阶

Java 面试 后端开发

咨询公司也要挑客户吗?

秋去冬来春未远

数字化 信息化 客户 咨询

15 张图 | 深入理解 OpenFeign 远程调用的架构原理

悟空聊架构

Feign 4月日更 悟空聊架构 openfeign 4月月更

格灵深瞳与华为签署合作协议,共同推进昇腾AI产业创新发展

Geek_32c4d0

昇腾AI

Mycat 多租户方案

爱好编程进阶

Java 面试 后端开发

Zookeeper+ActiveMQ集群搭建

爱好编程进阶

Java 面试 后端开发

泛型真的会让程序变慢吗?(Go1.18新特性)

蔡超

golang 编程 编程、 Go 语言

Kubernetes 常用命令大全

爱好编程进阶

Java 面试 后端开发

GitOps的12个痛点

俞凡

DevOps 研发效能 gitops

Java程序员2021年金三银四面试必备:高速突击学习框架+性能优化

爱好编程进阶

Java 面试 后端开发

Java面试过了京东五面之后,发现掌握了这些技术也没有那么难

爱好编程进阶

Java 面试 后端开发

读《Software Engineering at Google》(07)

术子米德

架构师成长笔记

在线脑图思维导图生成工具

入门小站

工具

在线CSV转多行数据工具

入门小站

工具

消息队列存储消息数据的 MySQL 表格

AragornYang

架构训练营 架构实战营

RabbitMQ 最常用的三大模式

爱好编程进阶

Java 面试 后端开发

SpringBoot文件上传临时目录找不到的问题

爱好编程进阶

Java 面试 后端开发

Spring学习--面向抽象编程(模拟Spring的简单实现)

爱好编程进阶

Java 面试 后端开发

spring-cloud-kubernetes官方demo运行实战

程序员欣宸

#Kubernetes# spring-cloud java 4月月更

王者荣耀商城异地多活架构设计

Fingal

架构实战营

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