作者 Mark Levison译者 郑柯 发布于 2008年10月4日 上午6时30分

社区
Agile
主题
单元测试,
质量交付
标签
最佳实践,
测试驱动开发

什么样的测试算是好测试?我们又该怎么知道如何编写好测试?

Kent Beck断定,好的测试应该具备下列条件:

  1. 互相隔离的(不受其他测试的表现形式、是否存在、执行结果的影响)
  2. 自动化的
  3. 编写快
  4. 运行快
  5. 独一无二(为开发人员提供自信,而不会由其他测试提供信息,与其他测试不相关)

Roy Osherove补充道:好的测试有三个基本属性:可维护、值得信赖、易于理解。

Mike Hill的列表要更长:

  • 它会很短,通常只有十来行代码。
  • 它不会测试运行程序内部的对象,但是会测试为了测试目的而构建的应用内部的对象。
  • 它只会调用很小的一部分代码,通常是某个函数的某一分支。
  • 它是灰盒的形式编写的。也就是说,它运作的方式像是黑盒,但是有时又会利用白盒的长处。(一般来说,这是避免组合问题的重要因素。)
  • 测试要符合生产代码的编码标准,比如,团队目前对于优秀编码的最佳看法。
  • 应用的众多小测试构成了一个“提交关卡”。这就是说,开发人员可以在所有小测试通过的情况下提交代码,否则(强烈建议、甚至不惜手段)阻止他们提交。
  • 测试应对接受测试的对象有完全的控制权,因此应是自包含的。也就是说,它不会依赖不属于测试代码及其依赖图的任何其他对象。
  • 它的运行时间非常短。
  • 它会先于要测试的代码变更之前编写。
  • 通过一系列slip-and-fake技巧,它会避免使用所有“糟糕”的collaborator。
  • ……

Mike和Ron Jeffries提醒我们:TDD的核心价值是要简化设计、提升开发效率;代码质量的提升和bug数量的减少是因此而带来的重要好处。

Jeremy Miller补充了良好单元测试应该具备:

  • 与顺序无关,并且是隔离的。运行测试的软件可以按照以任何顺序运行。
  • 意图明确。最好的单元测试应该能够告诉阅读者,一个对象的API是如何准备被调用的。
  • 易于设置。

最后,Ed Burnette写到:要让你的单元测试在任何方面都可以重复;测试边界条件,并且要一直保持测试的通过率是100%。

查看英文原文:What are the Qualities of a Good Test?

[ZZ]好的测试应该具备哪些特质?相关推荐

  1. 带项目的一些体会以及合格的 Leader 应该具备什么特质?(转)

    许多项目有这样几种 Leader: 1. 泛泛而谈型 很多时候 Leader 仅仅给出一个大方向,提一些高屋建瓴的理论方向,事情还是交由普通开发人员去做.完了可能又会回头埋怨开发人员的水平不行,没有达 ...

  2. 一套好用的MES系统,到底要具备哪些特质?

    新的发展机会也面临新的挑战,现在的社会和企业环境正在面临着全面网络化,信息化.智能化,产业链协同的新型模式.而企业信息化建设被不可逆转的历史推向了市场大潮的浪尖. 越来越多企业选择引入MES软件来加强 ...

  3. 一个熟练程序员所具备的特质-1

    前几天看了一篇文章,现在总结一下. 你知道"有能力"和"熟练"的区别吗? 这听起来像一个具有欺骗性的问题,因为两个单词看上去似乎说的是一件事情,但是两者之间的微 ...

  4. 优秀的量化研究员具备哪些特质?

    优秀的量化研究员具备哪些特质? Hard Skills – The Essentials The work of a quantitative researcher is mission critic ...

  5. 一个超越时代的企业,应该具备什么特质?

    提起国内外优秀的企业,我们能够想出一连串的名字,从谷歌.特斯拉到腾讯.字节跳动等等.如果在这些优秀的企业中,再选择一个能够超越时代的企业,恐怕当属苹果更有资格.在很多人看来,已经失去乔布斯的苹果现在已 ...

  6. 测试需要具备的能力以及探索式测试

    测试需要具备的素质: 1.专业技能. 扎实的专业知识就像灯塔一样,时刻为你指明方向. 2.业务分析能力. 业务一定要分析透彻,我们才能写出好的方案和测试用例等,才能更好更快的发现问题,分析问题以及解决 ...

  7. 移动端测试必须具备的技能

    第一:熟悉H5.Android和IOS平台的基础特性,各种应用测试特征(熟练掌握Android,IOS以及H5的测试要领) 第二:熟练使用各种性能测试工具进行问题的分析和定位 APP性能 网络性能 S ...

  8. 测试工程师具备的基本素质

    又和大家相遇在这里,又是很久没有更新BLOG,告诉大家一个可喜的消息,watir 2.0.0已经发布了!!最近我一直在研究InternetExplorer.Application,相关文章也随即会跟上 ...

  9. 测试工程师具备开发能力的重要性

    测试现状 为什么对测试工程师的要求在上升? 分析 技术要求 工具 测试的开发能力对测试质量的影响 分析 测试发展方向 测试现状 当前测试工程师做的主要工作是手动测试和编写测试用例:即便在一些公司,测试 ...

最新文章

  1. Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'的解决
  2. matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
  3. [JS][前端]修改文件input为button样式
  4. idc机房运维巡检_智和信通赋能国产信创 建设IT智能监控运维体系 - 蔚颖willing...
  5. android寻找手机,寻找那些“干净”的Android手机
  6. python能开发android吗_python可以开发安卓吗
  7. oracle数据库inactive状态session过多的原因定位
  8. 扫描服务器用户,服务器安全工具(自动扫描后门路径)
  9. 打开计算机管理提示找不到文件,Win8系统打开计算机管理提示找不到文件怎么解决...
  10. java collection 遍历_Java for循环对集合的遍历
  11. python工资一般多少p-Python P值
  12. S3TC IAP15F2K61S2点亮一个发光二极管keil和stc-isp软件操作
  13. 实测!让M1芯片版mac也能写入NTFS格式磁盘,完整教程附上!
  14. Linux成长之路-基础篇(2)
  15. java jquery时间问候语,js实现实时问候,不同时间显示不同问候语
  16. 基于JavaWeb的小区车辆信息管理系统
  17. cv2.imshow无法正常显示图片,而是一闪而过解决办法
  18. Base64 在线编码解码
  19. 【CVPR 2022】Deblur-NeRF: Neural Radiance Fields from Blurry Images
  20. Java 生成随机中文、英文姓名(下)

热门文章

  1. Spring Boot 动态数据源(多数据源自己主动切换)
  2. hihocoder 1490 Tree Restoration
  3. Linux服务器上挂载window本地iso镜像文件的方法。
  4. Office 365系列(7)------ Exchange 2013与Office 365 Hybrid混合部署Step by Step参考
  5. 启动EBS的时候,弹出Java安全警告:“该应用程序要求具有Java的早期版本。是否要继续?”...
  6. BCH接下来如何走?且看这场大会传达了什么思想
  7. 仅支持BCH的众筹平台Coinfundr或能革新众筹业
  8. 细述vim编码格式配置
  9. Android人脸识别App(带web上传注册信息)
  10. [译] 关于 Angular 动态组件你需要知道的