NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

更好的单元测试准则

  • 2009-07-26
  • 本文字数:732 字

    阅读完需:约 2 分钟

Jimmy Bogard 写了一篇文章:“从你的单元测试中获得价值”,在文章中他给出了三条规则:

  1. “测试名称应该从使用者的角度来描述是什么以及为什么”;核心思想是一名开发者应该能够从测试名称理解测试行为是什么样的。
  2. “测试也是代码,爱他们吧”;仅在产品代码中做重构是不够的。易于理解的测试更易于维护,而且后来的人也更容易弄清楚。 “我憎恨、憎恨长而复杂的测试。如果一个测试的 setup 方法有 30 行,请将这些代码放在一个 creation 方法中。一个长测试会激怒开发者并让其头昏眼花。如果在产品代码中没有长方法,为什么会允许在我们的测试代码中有长方法?”
  3. “不要设定单一 fixture 的模式 / 组织风格”;通常情况下是一个类对应一个 test fixture,但有时候这样的标准并不适用。

Lior Friedman 补充:“规则#0——测试外部行为而不是内部结构。” 或者,测试一个类的期望行为而不是它的目前结构。

Ravichandran Jv 补充了他自己的规则:

  1. 尽可能做到每个测试一个断言。
  2. 如果在一个测试中有任何“if else”语句,将语句分支移到单独的测试方法中。
  3. 如果被测试的方法有 if else 分支,该方法应该被重构。
  4. 测试方法名称应该表明是某种测试。例如,TestMakeReservation 与 TestMakeNoReservation() 是不同的。

NUnit 的作者 Charlie Poole 再次说明:每测试一断言的说法为一个“逻辑断言”,他说:“有时,由于被测试的 api 缺乏表达能力,你需要写多个断言语句来获得期望的结果。在 NUnit 框架 api 的开发中,很多工作就是试图让一个断言做更多的工作。”

Bryan Cook 提出了他自己的列表:

  1. 实作:Fixture 命名保持一致
  2. 实作:模拟目标代码的命名空间
  3. 实作:Setup/TearDown 方法命名保持一致
  4. 考虑:分离测试与产品代码
  5. 实作:按功能给测试命名
  6. 考虑:在期望异常的命名中使用“Cannot”作为前缀
2009-07-26 01:483200
用户头像

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

关注

评论

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

敏捷宣言和原则

老王同学

读书笔记

qemu怎么用

linux大本营

qemu

CouldNOTfindGMP(missing:GMP_LIBRARYGMP_INCLUDE_DIR)CallStack(mostrecentcallfirst)

linux大本营

Linux GNU cmake

点对点传输效率对比测试——镭速传输

镭速

nvmf协议

linux大本营

网络协议 nvme RDMA技术

一个能在Linux下使用C++编写的访问RabbitMQ接收发送数据的可编译代码

linux大本营

RabbitMQ 消息队列 C++

logrotate怎么使用

linux大本营

Linux 日志管理

斩获四奖|海泰方圆荣登网信自主创新尖锋榜

电子信息发烧客

汽车制造数字化转型如何做?有哪些可行性案例?

优秀

数字化转型 汽车制造

发送GET请求时,浏览器请求的参数是指什么

linux大本营

HTTP url GET

C语言system函数判断返回错误

linux大本营

C语言

seq命令

linux大本营

Shell 脚本

对标阿里P8级Java面试题及答案整理(2023速成版,7天就能吃透)

收到请回复

终于有人把动态规划、冒泡排序、二叉树、链表、栈全部讲清楚了

收到请回复

程序员 java

已知非空线性链表由list指出,链结点的构造为(data,next)。写-算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点

linux大本营

链表 C语言 数据结构与算法

使用Plist编辑器——简单入门指南

雪奈椰子

PerformingTestCOMPILER_KNOWS_STDLIB-Failed

linux大本营

cmake C++

linux如何计算一个shell程序运行的时间

linux大本营

Shell Linux系统

c语言如何用宏来实现字符串到函数的映射?

linux大本营

C语言 映射函数

【Python实战】Python采集最低战力信息

BROKEN

三周年连更

九层天塔DApp合约系统开发搭建

薇電13242772558

NFT

构建数据中台——数据只有被使用起来,才能创造价值

引迈信息

数据库 数据中台 低代码 JNPF 数字化、操作系统、中台

详细讲解spdk里的examples/nvmf/nvmf/nvmf.c文件

linux大本营

nvme 文件存储

如何执行mysql文件

linux大本营

MySQL 数据库

Logrotate正则匹配文件名

linux大本营

正则表达式 Linux

linux如何设置一个环境变量,在shell退出之后也不会失效

linux大本营

Linux Shell export

constchar*类型的实参与char*类型的形参不兼容

linux大本营

指针 const C++

ShareSDK QQ平台注册

MobTech袤博科技

再写一个版本,要求使用类进行封装,提供完善的接口,并对函数进行完善注释

linux大本营

RabbitMQ AMQP C++

写一个epoll的服务端程序

linux大本营

事件驱动 epoll C++ I/O 多路复用

开心档之C++ 类 & 对象

雪奈椰子

更好的单元测试准则_研发效能_Mark Levison_InfoQ精选文章