摘要: 二、优秀单元测试的支柱 要编写优秀的单元测试,它们应该同时具有 可靠性、可维护性 及 可读性。 2.1 编写可靠的测试 一个可靠的测试能让你觉得自己对事态了如指掌,能够从容应对。以下是一些指导原则和技术: (1)决定何时删除或修改测试 一旦测试写好并通过,通常我们不应该修改或删除这些测试,因为它们是 阅读全文
posted @ 2020-05-30 16:36 delafqm 阅读(622) 评论(0) 推荐(0) 编辑
摘要: 一、测试层次和组织 1.1 测试项目的两种目录结构 (1)集成测试和单元测试在同一个项目里,但放在不同的目录和命名空间里。基础类放在单独的文件夹里。 (2)集成测试和单元测试位于不同的项目中,有不同的命名空间。 实践中推荐使用第二种目录结构,因为如果我们不把这两种测试分开,人们可能就不会经常地运行这 阅读全文
posted @ 2020-05-30 16:34 delafqm 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 三、隔离(模拟)框架 3.1 为何使用隔离框架 对于复杂的交互场景,可能手工编写模拟对象和存根就会变得很不方便,因此,我们可以借助隔离框架来帮我们在运行时自动生成存根和模拟对象。 一个隔离框架是一套可编程的API,使用这套API创建伪对象比手工编写容易得多,快得多,而且简洁得多。 隔离框架的主要功能 阅读全文
posted @ 2020-05-30 16:29 delafqm 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 二、交互测试-模拟对象 工作单元可能有三种最终结果,目前为止,我们编写过的测试只针对前两种:返回值和改变系统状态。现在,我们来了解如何测试第三种最终结果-调用第三方对象。 2.1 模拟对象与存根的区别 模拟对象和存根之间的区别很小,但二者之间的区别非常微妙,但又很重要。二者最根本的区别在于: 存根不 阅读全文
posted @ 2020-05-30 16:28 delafqm 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 一、破除依赖-存根 1.1 为何使用存根? 当我们要测试的对象依赖另一个你无法控制(或者还未实现)的对象,这个对象可能是Web服务、系统时间、线程调度或者很多其他东西。 那么重要的问题来了:你的测试代码不能控制这个依赖的对象向你的代码返回什么值,也不能控制它的行为(例如你想摸你一个异常)。 因此,这 阅读全文
posted @ 2020-05-30 16:26 delafqm 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 一、单元测试基础 1.1 什么是单元测试 一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。 单元测试几乎都是用单元测试框架编写的。单元测试容易编写,能够快速运行。单元测试可靠、可读,并且可维护。 只要产品代码不发生变化,单元测试的结果是稳 阅读全文
posted @ 2020-05-30 16:14 delafqm 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 虽然目前计算机编程语言有好几百种,但有时人们还是希望用一些简单的语言来实现特定的操作,只需要向计算机输入一个句子或文件,就能按照预定的文法规则来对句子或文件进行解释。例如,我们想要只输入一个加法/减法表达式,它就能够计算出表达式结果。例如输入“1+2+3-4+1”时,将输出计算结果为3。像C++,J 阅读全文
posted @ 2020-05-30 15:50 delafqm 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 我们都用过QQ,它有两种聊天方式:一是私聊,二是群聊。使用QQ群,一个用户就可以向多个用户发送相同的信息和文件,从而无需一一发送,节省大量时间。通过引入群的机制,极大地减少系统中用户之间的两两通信,用户与用户之间的联系可以通过群的机制来实现。 在有些软件中,某些类/对象之间的相互调用关系错综复杂,类 阅读全文
posted @ 2020-05-30 15:47 delafqm 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 我们都用过电视机遥控器,通过它我们可以进行开机、关机、换台、改变音量等操作。我们可以将电视机看做一个存储电视频道的集合对象,通过遥控器可以对电视机中的频道集合进行操作,例如返回上一个频道、跳转到下一个频道或者跳转到指定的频道等。遥控器的出现,使得用户不需要知道这些频道到底如何存储在电视机中。在软件开 阅读全文
posted @ 2020-05-30 15:44 delafqm 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 相信每个人都有后悔的时候,但是人生并无后悔药,有些错误一旦发生就无法再挽回,有些事一旦错过就不会再重来,有些话一旦说出口也就不可能再收回,这就是人生。为了不让自己后悔,我们总是需要三思而后行。这里我们要学习一种可以在软件中实现后悔机制的设计模式—备忘录模式,它是软件中的“后悔药”。 备忘录模式(Me 阅读全文
posted @ 2020-05-30 15:34 delafqm 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 在生活中,我们装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或换气扇。在购买开关时,用户并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、换气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制换气扇或者其他电器设备。相同的开关可以通 阅读全文
posted @ 2020-05-30 15:28 delafqm 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 俗话说条条大路通罗马,很多情况下实现某个目标地途径都不只一条。在软件开发中,也会时常遇到这样的情况,实现某一个功能有多条途径,每一条途径都对应一种算法。此时,可以使用一种设计模式来实现灵活地选择解决途径,也能够方便地增加新的解决途径。 策略模式(Strategy) 学习难度:★☆☆☆☆ 使用频率:★ 阅读全文
posted @ 2020-05-30 15:22 delafqm 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 在现实生活中,很多事情都需要经过几个步骤才能完成,例如请客吃饭,无论吃什么,一般都包含:点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单=>吃东西=>买单。在这3个步骤中,点单和买单大同小异,最大的区别在于第2步-吃什么?吃面条和吃满汉全席可大不相同。 在软件开发中,有时候也会遇到类 阅读全文
posted @ 2020-05-30 15:19 delafqm 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示。 在软件开发中,有时候也需要处理像处方单这样的集合对象结构,在该对象结构中存储了多个不同类型的对象信息,而且对同一对象结构中的 阅读全文
posted @ 2020-05-30 15:15 delafqm 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 在日常生活中,交通信号灯指挥者日益拥挤的城市交通。红灯亮,汽车停止;绿灯亮,汽车继续前行;在这个过程中,交通信号灯是汽车的观察目标,而汽车则是观察者。随着交通信号灯的变化,汽车的行为也会随之变化,一盏交通信号灯可以指挥多辆汽车。在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系,一个对象 阅读全文
posted @ 2020-05-30 15:09 delafqm 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新牌。在这个过程中,纸牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。在设计模式中, 阅读全文
posted @ 2020-05-30 15:07 delafqm 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 所谓代购,简单说来就是找人帮忙购买所需要的商品。代购分为两种类型,一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地区甚至国外购买该商品,然后通过快递发货或直接携带回来。另一种则是消费者对想要购买的商品相关信息的缺乏,自己无法确定其实际价值,因此只好委托中 阅读全文
posted @ 2020-05-30 14:56 delafqm 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 现在在大力推行节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如,在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高。那么,是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案是肯定的, 阅读全文
posted @ 2020-05-30 14:52 delafqm 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服务员一样的角色,由他来负责和多个业务类进行交互,而使用这些业务类的类只需要和该类进行交互即可。外观模 阅读全文
posted @ 2020-05-30 14:49 delafqm 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 虽然目前房价依旧很高,就连我所在的成都郊区(非中心城区)的房价均价都早已破万,但却还是阻挡不了大家对新房的渴望和买房的热情。如果大家买的是清水房,那么无疑还有一项艰巨的任务在等着大家,那就是装修。对新房的装修并没有改变房屋用于居住的本质,但它可以让房子变得更加漂亮和温馨以及更加实用。在软件设计中,也 阅读全文
posted @ 2020-05-30 14:45 delafqm 阅读(107) 评论(0) 推荐(0) 编辑