【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

当红语言模型利器:深度解析向量数据库技术及其应用

Baihai IDP

人工智能 AI 向量数据库 白海科技 大语言模型

采用Excel作为可视化设计器的开源规则引擎 NopRule

canonical

低代码 规则引擎 可视化开发 可逆计算 Nop平台

数据通信网络之OSPFv3基础

timerring

数据通信网络

3天上手Ascend C编程丨通过Ascend C编程范式实现一个算子实例

华为云开发者联盟

人工智能 开发 华为云 华为云开发者联盟 企业号9月PK榜

ARTS week4

Z.

ARTS 打卡计划 #ARTS 左耳朵耗子

室内LED全彩显示屏P3和P5有什么区别

Dylan

LED 全彩LED显示屏 led显示屏厂家 户内led显示屏

离散性行业介绍及与MES系统的好处

万界星空科技

MES系统 产品资讯

玖章算术叶正盛将揭示为什么PostgreSQL不如MySQL流行?|3306π

NineData

数据库 postgresql 开源 叶正盛 NineData

极光笔记 | 推送服务数据中心选择:合规性与传输效率的双重考量

极光JIGUANG

当今怎么还沿用水晶头呢?

小齐写代码

基于 Flink CDC 高效构建入湖通道

Apache Flink

大数据 flink 实时计算

“价值交付课程”11月4-5日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

DevSecOps 中的漏洞管理(下)

禅道项目管理

DevOps 漏洞

冰火两重天——GTLC有感

IT民工大叔

个人成长 GTLC 技术领导力

对线面试官 - 绝无仅有真实线上问题排查面试题突击篇

派大星

Java 面试题

WiFi Scanner for Mac(Wifi无线网络扫描管理软件) v3.1完美激活版

mac

苹果mac Windows软件 wifi scanner 无线网络扫描管理软件

火山引擎DataLeap的数据血缘用例与设计概述

字节跳动数据平台

大数据 企业号9月PK榜

构建值得信赖的生成式AI应用

百度开发者中心

#人工智能 生成式AI 文心一言

Serialbox for Mac(序列号查询工具) v2023.09永久激活版

mac

windows 苹果mac Serialbox 序列号查询软件

9月23-24日·上海线下·CSM认证周末班【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum捷行

这一次,大模型颠覆广告行业!

Openlab_cosmoplat

人工智能 大模型

领域驱动设计(DDD):DDD落地问题和一些解决方法

付威

文本智能的未来发展方向

百度开发者中心

AIGC #人工智能 生成式AI 文心一言

Spring 条件注解没生效?咋回事

江南一点雨

Java spring

S0001-大环境介绍

远观钱途

谷沁清益生菌清口含片,守护口腔健康的第一道防线

联营汇聚

人工智能新范式,创新驱动生产力

百度开发者中心

#人工智能 ChatGPT 文心一言

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