2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

openGauss都做了哪些算子优化工作?

daydayup

opengauss

INFINI Labs 产品更新 | Easysearch 新增分词插件、Gateway 支持邮件发送等功能

极限实验室

ES 产品更新 极限科技

PoseiSwap 即将开启 POSE 单币质押,治理体系将全面运行

BlockChain先知

深入浅出openGauss的执行器基础

daydayup

opengauss

Java——二维数组的用法

java易二三

Java 基础入门

基础软件加速自主创新,openGauss成就业务“新箭头”

daydayup

opengauss

通过降本增效,提升测试价值

老张

研发效能 降本增效

Java干货分享—Calendar 类的使用

java易二三

Java 编程 程序员

场景题-如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。

派大星

Java 面试题

C语言实现哈希搜索算法

芯动大师

一个逻辑完备的线程池

1412

c++ 开源 线程池 异步编程 workflow

Java基础——IO流

java易二三

Java 编程 程序员

黄凯耀:深度解读openGauss架构创新与新特性

daydayup

opengauss

李士福:openGauss 自驾驶数据库内核在AI领域的探索和创新

daydayup

opengauss

ZBC Staking 即将开启,全新利好来袭

鳄鱼视界

openGauss DBMind上的多指标关联性分析介绍

daydayup

opengauss

AI开发硬件基础经验

timerring

AI

2023-07-22:一共有n个项目,每个项目都有两个信息, projects[i] = {a, b}, 表示i号项目做完要a天,但是当你投入b个资源,它就会缩短1天的时间, 你一共有k个资源,你的目

福大大架构师每日一题

福大大架构师每日一题

Java大数字运算之BigDecimal 类

java易二三

Java 程序员 程序猿

Code片段 GC

Bert

openGauss:共建数据库根社区,打造开源数据库核心竞争力

daydayup

opengauss

openGauss数据库源码解析系列文章——执行器解析

daydayup

opengauss

产品服务谁?产品做什么服务?

Bonaparte

产品 产品设计 产品思维 产品服务

如何通过网关降低大模型的调用费用,并提升合规性

阿里巴巴云原生

阿里云 云原生 网关

异步编程框架:Workflow的计算调度算法

1412

c++ 开源 异步编程 workflow 调度算法

ZBC Staking 即将开启,全新利好来袭

西柚子

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