自动化测试过程中,有一些基本的原则,就如同宣言(Manifesto)。由于大部分的原则在前面其实都提到的,因此,有的不做太多说明了。

原则:Write the Tests First

原则:Design for Testability

原则:Use the Front Door First

意思是说,从最外层暴露的publish方法开始测试。

原则:Communicate Intent

意思是说,测试案例要意图明确,这样才容易理解和维护。比如,命名时,使用Intent-Revealing Names[SBPP]。参考:http://architects.dzone.com/news/intention-revealing-designs

原则:Don’t Modify the SUT

不要修改被测的对象。但有时需要使用一些Test Double或Fake对象时,要注意每个替代的对象都被测试。举了个例子,有X,Y,Z三个模块,X依赖于Y和Z,Y依赖于Z,测试X时,可以使用Test Double代替Y和Z,测试Y时,可以使用Test Double代替Z,但是在测试Z时,不能再把Z替换成Test Double了,因为Z就是被测对象。

原则:Keep Tests Independent

让测试案例独立,能够单独的执行,不依赖于别的案例。

原则:Isolate the SUT

让SUT独立,不依赖外部的环境。SUT往往会依赖一些外部的其他环境,比如,依赖一个外部的应用程序,依赖一个可用的http服务器等等。这使得测试变得不稳定,或者减慢了执行的速度。去除SUT依赖的方法是使用Test Double替换掉外部的因素。比如,需要http服务器,可以自己搭一个假的http服务器。

原则:Minimize Test Overlap

最小化重复的测试。我们知道,测试案例的组合是无穷无尽的,我们不可能覆盖所有的组合。但我们可以选择最佳的组合。对被测代码的同一个条件进行重复的测试是没有多少意义的。

原则:Minimize Untestable Code

最小化不可测试的代码,方法就是,重构!

原则:Keep Test Logic Out of Production Code

上一节提到了,不要在产品的代码里添加任何测试的逻辑。比如,像if tesing之类的判断。

原则:Verify One Condition per Test

解释的过程中,有个观点比较有意思。手工测试时,通常会做一些复杂的操作,复杂的条件组合在一起,然后看是否出错。这看起来和自动化测试或单元测试完全相反了,为什么呢?这是因为,人能够在复杂的情况下去判断各种执行结果,并能够去分析其中的问题。而我们的案例其实并没有那么智能,为了让案例能够更加精确的定位问题,我们只能检查每个案例只检查一种情况。

原则:Test Conerns Separtely

Separation of concerns的解释见:http://en.wikipedia.org/wiki/Separation_of_concerns

这里的意思大概是让测试案例做好分层,减少重复的部分,从而更加容易定位问题。

原则:Ensure Commensurate Effort and Responsibility

编写和维护测试案例的时间,不能超过实现产品代码的时间。因此,要平衡好测试与开发的付出。

转载于:https://www.cnblogs.com/coderzh/archive/2010/01/23/xUnit-Test-Patterns-4.html

《xUnit Test Patterns》学习笔记4 - Principles of Test Automation相关推荐

  1. 《xUnit Test Patterns》学习笔记3 - Philosophy of Test Automation

    这一章主要讲自动化测试的原则.前面的章节介绍了很多测试的思想,而思想的东西难免有点虚,这一章就是告诉你,遇到了具体的什么问题时,应该怎么办.作者咨询了很多的开发人员和测试人员,同时也和Martin F ...

  2. 《xUnit Test Patterns》学习笔记2 - Goal Of Test Automation

    或许有人觉得单元测试可有可无,因为觉得需要付出太多的精力,而客户并不需要它.这就涉及到投资回报率的问题,其实所付出的用于测试的投资,往往会收获到更多回报.它让我们减少了Bug的数量,减少了调试代码寻找 ...

  3. 大卫的Design Patterns学习笔记19:Observer

    一.概述 Observer(观察者)模式又被称作发布-订阅(Publish -Subscribe)模式,用于定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自 ...

  4. Structural patterns (proxy、bridge、decorator)学习笔记(一)

    Structural patterns (proxy.bridge.decorator)学习笔记(一) 一.proxy pattern是实际应用中,一般都用于比较复杂的一些对象当中,尤其是创建对象需要 ...

  5. 不完全免疫算法简介HEIA--AIS学习笔记2

    不完全免疫算法简介HEIA–AIS学习笔记2 觉得有用的话,欢迎一起讨论相互学习~ 多目标优化 A Hybrid AIS for MOP 参考文献 A Hybrid Evolutionary Immu ...

  6. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  7. CSS3秘笈第三版涵盖HTML5学习笔记6~8章

    第二部分----CSS实用技术 第6章,文本格式化 指定备用字体: font-family:Arial,Helvetica,sans-serif; 当访问者没有安装第一种字体时,浏览器会在列表中继续往 ...

  8. Angular 服务器端渲染的学习笔记(二)

    官网地址:https://angular.io/guide/universal I have mainly used angular universal for SEO purposes. In th ...

  9. ELK学习笔记之Logstash详解

    0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...

最新文章

  1. 苹果向App Analytics添加新的指标和特性
  2. 一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault...
  3. MD5加密以及验证加密-加盐
  4. layer.js载入失效问题
  5. proc下kcore是什么文件
  6. 重构手法之简化函数调用【1】
  7. 五分钟快速搭建Serverless免费邮件服务
  8. 计算机关机后耗电问题,不用拔电线 轻松设置解决电脑关机耗电
  9. android 动画之漂移,Android之自定义Drawable实现灵动的红鲤鱼动画(上篇)
  10. 老男孩教育每日一题-第75天-linux无法上网或联网怎么办?
  11. VXLAN Ethernet Virtual Private Network集中式和分布式网关实验(华为设备)
  12. 用 Mac 制作手写签名,没打印机也能搞事
  13. bim技术应用有哪些
  14. ISP许可证是什么证?
  15. oeasy教您玩转vim - 39 - # 剪切粘贴
  16. ECMWF数据批量下载
  17. 盛铭轩电商:详情页优化
  18. Linux磁盘分区初始化
  19. 支付宝pc端支付回调处理
  20. Java项目:SSM员工考勤管理系统

热门文章

  1. 一些PHP性能优化汇总
  2. 获取request中的查询参数
  3. MVP Community Camp 社区大课堂
  4. 运维老鸟职场生活交友经验谈
  5. Linux Shell特殊字符和控制字符
  6. Mysql date time formate
  7. 技术中国论坛版本升级了!
  8. 本科主要数学科目的页数统计
  9. Flink1.12 standalone-HA配置(转载+自己验证)
  10. AuthFailed at /social-auth/complete/facebook/