7月QCon广州站2022,关注Web 3.0、数据架构选型、数字化转型等热门话题,点击了解 了解详情
写点什么

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

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

关注

评论

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

云原生新边界——阿里云边缘计算云原生落地实践

Java 程序员 后端

云原生时代下,容器安全的“四个挑战”和“两个关键

Java 程序员 后端

五分钟带你了解Seata分布式事务

Java 程序员 后端

2021 大厂面试题之 mysql 篇

小麦

MySQL 面试题 大厂

京东T7架构师用470页就把微服务架构原理与开发实战文档讲完了(1)

Java 程序员 后端

为什么建议大家使用 Linux 开发?爽(外加七个感叹号)

Java 程序员 后端

CSS页面设计稿构思与实现(三)之UI组件

Augus

CSS 11月日更

京东T7架构师手写的10万字Spring Boot详细学习笔记+源码免费下载

Java 程序员 后端

Serverless 架构模式及演进

Serverless Devs

Serverless 架构设计

京东员工被裁后哀叹:优化后连面试的机会都没有,每月还要还贷款

Java 程序员 后端

为什么你的insert就死锁了

Java 程序员 后端

主流的消息队列MQ比较,详解MQ的4类应用场景

Java 程序员 后端

京东T7团队技术4面:线程池+索引+Spring +分布式锁

Java 程序员 后端

京东T7架构师用470页就把微服务架构原理与开发实战文档讲完了

Java 程序员 后端

京东秒杀系统是世界上最牛批的,不接受反驳!(1)

Java 程序员 后端

小学妹与我畅聊黑客渗透技术

喀拉峻

黑客 网络安全 信息安全 渗透测试

这一次,中国CRM站到风口上了吗?

ToB行业头条

CRM

docker基础

小麦

五分钟带你读懂!Spring Cloud构建微服务分布式云平台(1)

Java 程序员 后端

五分钟带你读懂!Spring Cloud构建微服务分布式云平台

Java 程序员 后端

模块三

侠客行

架构实战 「架构实战营」

三年沉淀,Apache ShardingSphere 5.0.0 开启数据应用新篇章

SphereEx

Java 数据库 开源 Apache ShardingSphere DateBase

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

Java 程序员 后端

Serverless 工程实践 | 快速搭建 Kubeless 平台

Serverless Devs

k8s 架构设计 框架搭建 框架学习

五分钟学会做一个在线抽奖系统,手把手教你抽奖还学不会嘛?

Java 程序员 后端

Serverless 下的微服务实践

Serverless Devs

阿里云 Serverless 架构 微服务

事大发了!小助理告诉我:小伙伴21天斩获字节offer的关键竟是这份面试题!

Java 程序员 后端

二维码扫码登录是什么原理?

Java 程序员 后端

五、redis配置信息以及常用命令

Java 程序员 后端

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