当前位置: 首页 > news >正文

我的测试生活感悟2 - Art Of Unit Testing

今天把《Art Of Unit Testing》的前四个章节读完了,作者以自己的亲身经历,使用简洁清晰的语言,为我们展现了单元测试的艺术。
  1. 怎么定义一个好的测试案例呢?好的测试案例应该是在N年后还能运行良好并易于维护的。
  2. TOOD - Testabled Object-Oriended Design。作者也提到了这个颇有争议的问题,许多人认为,增加代码的可测性的同时,会使得代码变得更加丑陋。而作者不认为是这样,作者认为这样的修改 是另外一种面向对象,同样的也是优美的,这就是TOOD。
  3. 为了代码的可测性增加的一些代码,常常不希望编译到最后的产品中。可以有很多办法,比如用宏判断,如果使用的是.NE,还有一种办法,就是在相应的函数或类上面使用这个Attribute:[Conditional("DEBUG")]
  4. Action-Driven TestingResult-Driven Testing,两种不同的测试流派,一种检测行为本身,一种检查最后结果。不能说一定谁优谁劣,但作为单元测试,更多的应该是Action-Driven Testing,因为这样可以隔离一些其他外部的不稳定因素,当你的案例失败时,能够更加准备的定位问题所在。(事实上,集成测试就是Result-Driven Testing,一个很大的困惑就是集成测试案例失败了,通常是很难马上定位到原因的。)
  5. Stubs和Mocks的区别,这两个东西看起来几乎是一样的,事实上也确实很相似。但是,他们的区别也同样明显:Stubs不会导致案例失败,而Mocks会。换成我的理解就是,Stubs是一些假的东西,它能模拟一些我们想要的结果,而Mock呢,它就是一间谍(Test Spy),告诉我们被测代码做了些什么,于是,我们通过Mock对象来进行检查。
  6. One Mock Per Test,一个测试案例中,通常的模式是N个Stub对应1个Mock。如果一个测试案例有多于一个的Mock对象,说明你的案例感情不够专一。而一个测试案例,是可以有多个Stub对象的,他们共同协作模拟一些特定的虚拟场景,然后通过Mock对象,验证我们的被测对象是否对此做出了反应。

如果您觉得有用,请您告诉我,谢谢!
 
 
本文转自CoderZh博客园博客,原文链接: http://www.cnblogs.com/coderzh/archive/2009/09/07/MyTestingThink2.html,如需转载请自行联系原作者

相关文章:

  • 牛客---java练习
  • 今天晨跑了,呵呵
  • 素数
  • .net 简单实现MD5
  • Linux系统基础知识-嵌入式迅为4412开发板学习笔记
  • P2P 之 UDP穿透NAT的原理与实现
  • centos7 安装mysql
  • Redis(一):概述
  • objc_msgSend 调用方法
  • 关于.net 控件的html 属性的几点技巧
  • 3par的零检测功能使用方法及实测
  • 第一百七十八节,jQuery-UI,知问前端--对话框 UI
  • SQL中与IP相关的常见问题
  • 我为什么憎恨Framework (翻译)
  • 【BZOJ1030】【JSOI2007】文本生成器
  • 自己简单写的 事件订阅机制
  • [笔记] php常见简单功能及函数
  • Brief introduction of how to 'Call, Apply and Bind'
  • chrome扩展demo1-小时钟
  • ES6简单总结(搭配简单的讲解和小案例)
  • export和import的用法总结
  • Facebook AccountKit 接入的坑点
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript实现分页效果
  • JDK 6和JDK 7中的substring()方法
  • k个最大的数及变种小结
  • Mysql优化
  • Python打包系统简单入门
  • React16时代,该用什么姿势写 React ?
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 阿里云前端周刊 - 第 26 期
  • 浮动相关
  • 利用DataURL技术在网页上显示图片
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 事件委托的小应用
  • 提醒我喝水chrome插件开发指南
  •  一套莫尔斯电报听写、翻译系统
  • 《天龙八部3D》Unity技术方案揭秘
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (动态规划)5. 最长回文子串 java解决
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)Dubbo快速入门、介绍、使用
  • (转)Oracle 9i 数据库设计指引全集(1)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .Net - 类的介绍
  • .NET 8.0 中有哪些新的变化?
  • .net6使用Sejil可视化日志
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @DataRedisTest测试redis从未如此丝滑
  • @html.ActionLink的几种参数格式
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法