【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

高效理解机器学习

俞凡

机器学习 算法

粉丝提问:区块链与大数据开发读研方向怎么选?

千与编程

区块链、 大数据 开源

什么是软件开发领域的 obsolete 或者 deprecated 含义

Jerry Wang

软件工程 软件开发 三周年连更

极速上手使用Docker,这篇文章就够了!

浅羽技术

Java Docker centos 容器化 三周年连更

手撕代码系列(三)

控心つcrazy

JavaScript 前端面试题 手撕代码 ES6-ES12 面试必考

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0 (Ⅵ)

字节跳动数据平台

大数据 数据仓库 云原生 元数据 企业号 4 月 PK 榜

Matlab实现最优化

Shine

三周年连更

挑战 30 天学完 Python:Day14 高阶函数

MegaQi

挑战30天学完Python 三周年连更

深入探讨Go语言中Semaphore信号量的机制原理

Jack

我们如何将 Amazon Snowcone 送入轨道

亚马逊云科技 (Amazon Web Services)

轻松处理pdf文件:Acrobat Pro DC 2023 中文激活版

真大的脸盆

Mac Mac 软件 PDF编辑 pdf编辑工具

《底层逻辑2:理解商业世界的本质》

石云升

读书笔记 三周年连更

10分钟打造基于ChatGPT的Markdown智能文档

俞凡

人工智能

CDH安装与部署

乌龟哥哥

三周年连更

Windows下 IDE工具常见编译错误FAQ

鸿蒙之旅

OpenHarmony 三周年连更

云资源提供技术

阿泽🧸

云资源 三周年连更

Qz学算法-数据结构篇(二分查找、删除)

浅辄

三周年连更

挑战 30 天学完 Python:Day15 错误类型

MegaQi

挑战30天学完Python 三周年连更

C++ STL容器和算法:详解和实例演示

小万哥

c++ 容器 算法 后端 stl

音视频八股文(9)-- flv的h264六层结构和aac六层结构

福大大架构师每日一题

音视频 ffmpeg 福大大

Django笔记十九之manager用法介绍

Hunter熊

Python django Manager

2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109

福大大架构师每日一题

golang 算法 rust 福大大

算法题每日一练:螺旋矩阵 II

知心宝贝

数据结构 算法 前端 后端 三周年连更

切片的其他妙用

宇宙之一粟

Go 切片 三周年连更

如何评价 ChatGPT 回答策略的 ensure only ethical usage 特质

Jerry Wang

ChatGPT ChatGPT4 三周年连更

爱在日落黄昏时 | 我有话要说

后台技术汇

三周年连更

【Python实战】Python采集代理IP信息

BROKEN

三周年连更

通过华为云ECS云服务器搭建安防视频监控平台

DS小龙哥

三周年连更

Matlab实现机器学习

袁袁袁袁满

三周年连更

读书笔记:如何成为某个领域的前1%

老张

读书笔记 方法 写作技巧

自动化运维工具一览

穿过生命散发芬芳

自动化运维 三周年连更

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