写点什么

NUnit Action 特性简化单元测试编写

  • 2012 年 3 月 11 日
  • 本文字数:1190 字

    阅读完需:约 4 分钟

NUnit 最新版本展示了 Action 特性,该特性能够编排套件、测试及测试用例上的测试行为。开发人员可以通过在他们的测试项目中应用 Action 特性封装测试活动,并将其应用于类、接口、方法和程序集,来管理 setup(初始化)、teardown(结束清理)和测试端的其他行为。

当某个测试运行时,与之关联的所有 Action 特性会按照其定义顺序被调用两次,一次是 BeforeTest 事件,另一次是 AfterTest 事件。这种模式给予了开发人员对测试的 setup 和 teardown 行为的独立控制。

想要使用Action 特性,开发人员首先要做的是定义新特性,定义的方法有两种:一种是通过实现ITestAction 接口同时继承Attribute 类;另一种是直接继承TestActionAttribute 类。

下面的代码展示了通过实现ITestAction 接口来定义Action 特性:

而下面的代码则通过继承TestActionAttribute 达到了类似的效果:

一旦创建好Action 特性,就可以像任何普通的.NET 特性一样,将其应用于测试项目中的方法、类、接口或程序集上。

NUnit 的输出显示了 Action 特性的组合:

复制代码
***** BankingTests.AccountTest.DepositFunds<br></br>
Before via inheritance Case: AccountTest, from DepositFunds.<br></br>
After via inheritance Case: AccountTest, from DepositFunds.<br></br>
***** BankingTests.AccountTest.TransferFunds<br></br>
Before via Interface Case: AccountTest, from TransferFunds.<br></br>
After via Interface Case: AccountTest, from TransferFunds.

多个 Action 特性可应用于单个目标之上。如果 Action 特性定义在相同的括号里,那么执行顺序为从右至左;而如果它们单独定义,执行顺序则为至下往上。

当使用这种 Action 特性组合时,NUnit 会在相同的测试中执行每一个 Action。

复制代码
***** BankingTests.AccountTest.TransferWithInsufficientFunds<br></br>
Before via Interface Case: AccountTest, from TransferWithInsufficientFunds.<br></br>
Before via inheritance Case: AccountTest, from TransferWithInsufficientFunds.<br></br>
After via inheritance Case: AccountTest, from TransferWithInsufficientFunds.<br></br>
After via Interface Case: AccountTest, from TransferWithInsufficientFunds.

Action 特性可灵活重用应用于单元测试之上的多项功能。组合单元测试设置(setup)和行为(behavior)虽然可以大大提高测试人员的平均生产力和效率,但同时也会对维护这些测试的开发人员隐藏重要的测试逻辑。如果使用不当,会让单元测试变得层化(layered)和钝拙(obtuse)。

除了 Action 特性,NUnit 还发布了共 90 个错误修复以及框架上的一些其他改动。此外,该版本还结束了对旧版 NUnit 和.NET 的支持。随着 2.6 版本的发布,NUnit 将不再支持早期版本引入的约定,而只支持.NET 2.0 及后续更高版本。

查看英文原文: http://www.infoq.com/news/2012/03/NUnit-action-attributes

2012 年 3 月 11 日 21:421245
用户头像

发布了 125 篇内容, 共 31.8 次阅读, 收获喜欢 3 次。

关注

评论

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

分布式数据库拆分常用之法

华为云开发者联盟

数据库 架构 分布式

(1)skyent VMware Workstation Pro下载与安装

休比

使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?

程序员小航

Java 源码 源码阅读 JUC Semaphore

实践解读丨Python 面向对象三大特征之多态

华为云开发者联盟

编程 面向对象

LeetCode题解:144. 二叉树的前序遍历,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

架构设计:微服务架构如何划分?这6个标准原则让你一目了然

互联网应用架构

微服务 架构设计

收藏手册:该不该用Lombok?15个常用注解全解析

互联网应用架构

lombok

Java新特性:数据类型可以扔掉了?

Java 编程 架构师

第十一周.命题作业

刘璐

深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践

阿里云Edge Plus

5G 边缘计算 视频

我的 2020 iOS BAT面试心得:Bigo、字节、快手、伴鱼、百度、微博等

iOSer

ios 面试

Kotlin 插件1.4.10使用报错

三爻

android kotlin

英特尔、阿里巴巴全方位深化技术创新 共同引领数智未来

新闻科技资讯

Golang框架探索(一)

余歌

Web框架 Go web

收藏手册:Docker安装RabbitMQ,只需3步

互联网应用架构

Docker RabbitMQ

站在巨人的肩膀上学习:五位阿里大牛联手撰写的《深入浅出Java多线程》

Java架构之路

Java 编程 面试 并发编程 多线程

Java开发连Redis都不会还想跳槽涨薪?先把Redis的知识点吃透再说

Java架构之路

Java redis 编程 程序员 面试

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Learun

敏捷开发 开发工具

The Way To Go --- 切片

书旅

slice Go 语言

第十一周.总结

刘璐

第十二周.命题作业

刘璐

高难度对话读书笔记

wo是一棵草

虚拟币交易所搭建,数字货币永续合约平台搭建

Golang 反射性能优化

余歌

性能优化 Go 语言

测试工程师在敏捷项目中扮演什么角色?

禅道项目管理

程序员 敏捷开发 测试

(0)skynet序章

休比

2020 恒生 LIGHT 开发者大会,早鸟票限时开售

DT极客

第十三周.命题作业

刘璐

rpc探路(一)

余歌

springboot2.3手册:多租户及自动创建数据,这样做

互联网应用架构

springboot mybaitsplus 多租户 自动填充基础信息

谈谈力软快速开发平台B/S专业报表工具

Philips

敏捷开发 开发工具

NUnit Action特性简化单元测试编写_.NET_Harry Brumleve_InfoQ精选文章