摘要:
二、优秀单元测试的支柱 要编写优秀的单元测试,它们应该同时具有 可靠性、可维护性 及 可读性。 2.1 编写可靠的测试 一个可靠的测试能让你觉得自己对事态了如指掌,能够从容应对。以下是一些指导原则和技术: (1)决定何时删除或修改测试 一旦测试写好并通过,通常我们不应该修改或删除这些测试,因为它们是 阅读全文
posted @ 2020-05-30 16:36
delafqm
阅读(649)
评论(0)
推荐(0)
摘要:
一、测试层次和组织 1.1 测试项目的两种目录结构 (1)集成测试和单元测试在同一个项目里,但放在不同的目录和命名空间里。基础类放在单独的文件夹里。 (2)集成测试和单元测试位于不同的项目中,有不同的命名空间。 实践中推荐使用第二种目录结构,因为如果我们不把这两种测试分开,人们可能就不会经常地运行这 阅读全文
posted @ 2020-05-30 16:34
delafqm
阅读(549)
评论(0)
推荐(0)
摘要:
三、隔离(模拟)框架 3.1 为何使用隔离框架 对于复杂的交互场景,可能手工编写模拟对象和存根就会变得很不方便,因此,我们可以借助隔离框架来帮我们在运行时自动生成存根和模拟对象。 一个隔离框架是一套可编程的API,使用这套API创建伪对象比手工编写容易得多,快得多,而且简洁得多。 隔离框架的主要功能 阅读全文
posted @ 2020-05-30 16:29
delafqm
阅读(331)
评论(0)
推荐(0)
摘要:
二、交互测试-模拟对象 工作单元可能有三种最终结果,目前为止,我们编写过的测试只针对前两种:返回值和改变系统状态。现在,我们来了解如何测试第三种最终结果-调用第三方对象。 2.1 模拟对象与存根的区别 模拟对象和存根之间的区别很小,但二者之间的区别非常微妙,但又很重要。二者最根本的区别在于: 存根不 阅读全文
posted @ 2020-05-30 16:28
delafqm
阅读(428)
评论(0)
推荐(0)
摘要:
一、破除依赖-存根 1.1 为何使用存根? 当我们要测试的对象依赖另一个你无法控制(或者还未实现)的对象,这个对象可能是Web服务、系统时间、线程调度或者很多其他东西。 那么重要的问题来了:你的测试代码不能控制这个依赖的对象向你的代码返回什么值,也不能控制它的行为(例如你想摸你一个异常)。 因此,这 阅读全文
posted @ 2020-05-30 16:26
delafqm
阅读(431)
评论(0)
推荐(0)
摘要:
一、单元测试基础 1.1 什么是单元测试 一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。 单元测试几乎都是用单元测试框架编写的。单元测试容易编写,能够快速运行。单元测试可靠、可读,并且可维护。 只要产品代码不发生变化,单元测试的结果是稳 阅读全文
posted @ 2020-05-30 16:14
delafqm
阅读(290)
评论(0)
推荐(0)
摘要:
虽然目前计算机编程语言有好几百种,但有时人们还是希望用一些简单的语言来实现特定的操作,只需要向计算机输入一个句子或文件,就能按照预定的文法规则来对句子或文件进行解释。例如,我们想要只输入一个加法/减法表达式,它就能够计算出表达式结果。例如输入“1+2+3-4+1”时,将输出计算结果为3。像C++,J 阅读全文
posted @ 2020-05-30 15:50
delafqm
阅读(151)
评论(0)
推荐(0)
摘要:
我们都用过QQ,它有两种聊天方式:一是私聊,二是群聊。使用QQ群,一个用户就可以向多个用户发送相同的信息和文件,从而无需一一发送,节省大量时间。通过引入群的机制,极大地减少系统中用户之间的两两通信,用户与用户之间的联系可以通过群的机制来实现。 在有些软件中,某些类/对象之间的相互调用关系错综复杂,类 阅读全文
posted @ 2020-05-30 15:47
delafqm
阅读(141)
评论(0)
推荐(0)
摘要:
我们都用过电视机遥控器,通过它我们可以进行开机、关机、换台、改变音量等操作。我们可以将电视机看做一个存储电视频道的集合对象,通过遥控器可以对电视机中的频道集合进行操作,例如返回上一个频道、跳转到下一个频道或者跳转到指定的频道等。遥控器的出现,使得用户不需要知道这些频道到底如何存储在电视机中。在软件开 阅读全文
posted @ 2020-05-30 15:44
delafqm
阅读(135)
评论(0)
推荐(0)
摘要:
相信每个人都有后悔的时候,但是人生并无后悔药,有些错误一旦发生就无法再挽回,有些事一旦错过就不会再重来,有些话一旦说出口也就不可能再收回,这就是人生。为了不让自己后悔,我们总是需要三思而后行。这里我们要学习一种可以在软件中实现后悔机制的设计模式—备忘录模式,它是软件中的“后悔药”。 备忘录模式(Me 阅读全文
posted @ 2020-05-30 15:34
delafqm
阅读(281)
评论(0)
推荐(0)
摘要:
在生活中,我们装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或换气扇。在购买开关时,用户并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、换气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制换气扇或者其他电器设备。相同的开关可以通 阅读全文
posted @ 2020-05-30 15:28
delafqm
阅读(154)
评论(0)
推荐(0)
摘要:
俗话说条条大路通罗马,很多情况下实现某个目标地途径都不只一条。在软件开发中,也会时常遇到这样的情况,实现某一个功能有多条途径,每一条途径都对应一种算法。此时,可以使用一种设计模式来实现灵活地选择解决途径,也能够方便地增加新的解决途径。 策略模式(Strategy) 学习难度:★☆☆☆☆ 使用频率:★ 阅读全文
posted @ 2020-05-30 15:22
delafqm
阅读(195)
评论(0)
推荐(0)
摘要:
在现实生活中,很多事情都需要经过几个步骤才能完成,例如请客吃饭,无论吃什么,一般都包含:点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单=>吃东西=>买单。在这3个步骤中,点单和买单大同小异,最大的区别在于第2步-吃什么?吃面条和吃满汉全席可大不相同。 在软件开发中,有时候也会遇到类 阅读全文
posted @ 2020-05-30 15:19
delafqm
阅读(104)
评论(0)
推荐(0)
摘要:
在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示。 在软件开发中,有时候也需要处理像处方单这样的集合对象结构,在该对象结构中存储了多个不同类型的对象信息,而且对同一对象结构中的 阅读全文
posted @ 2020-05-30 15:15
delafqm
阅读(240)
评论(0)
推荐(0)
摘要:
在日常生活中,交通信号灯指挥者日益拥挤的城市交通。红灯亮,汽车停止;绿灯亮,汽车继续前行;在这个过程中,交通信号灯是汽车的观察目标,而汽车则是观察者。随着交通信号灯的变化,汽车的行为也会随之变化,一盏交通信号灯可以指挥多辆汽车。在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系,一个对象 阅读全文
posted @ 2020-05-30 15:09
delafqm
阅读(263)
评论(0)
推荐(0)
摘要:
相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新牌。在这个过程中,纸牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。在设计模式中, 阅读全文
posted @ 2020-05-30 15:07
delafqm
阅读(181)
评论(0)
推荐(0)
摘要:
所谓代购,简单说来就是找人帮忙购买所需要的商品。代购分为两种类型,一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地区甚至国外购买该商品,然后通过快递发货或直接携带回来。另一种则是消费者对想要购买的商品相关信息的缺乏,自己无法确定其实际价值,因此只好委托中 阅读全文
posted @ 2020-05-30 14:56
delafqm
阅读(192)
评论(0)
推荐(0)
摘要:
现在在大力推行节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如,在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高。那么,是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案是肯定的, 阅读全文
posted @ 2020-05-30 14:52
delafqm
阅读(144)
评论(0)
推荐(0)
摘要:
在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服务员一样的角色,由他来负责和多个业务类进行交互,而使用这些业务类的类只需要和该类进行交互即可。外观模 阅读全文
posted @ 2020-05-30 14:49
delafqm
阅读(165)
评论(0)
推荐(0)
摘要:
虽然目前房价依旧很高,就连我所在的成都郊区(非中心城区)的房价均价都早已破万,但却还是阻挡不了大家对新房的渴望和买房的热情。如果大家买的是清水房,那么无疑还有一项艰巨的任务在等着大家,那就是装修。对新房的装修并没有改变房屋用于居住的本质,但它可以让房子变得更加漂亮和温馨以及更加实用。在软件设计中,也 阅读全文
posted @ 2020-05-30 14:45
delafqm
阅读(121)
评论(0)
推荐(0)
摘要:
树形结构在软件中随处可见,比如操作系统中的目录结构,公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设计方案来使得用户可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致地处理树形结构中的叶子节点(不包含子节点的节点)和容器节点(包含 阅读全文
posted @ 2020-05-30 14:42
delafqm
阅读(259)
评论(0)
推荐(0)
摘要:
在现实生活中,我们常常会用到两种或多种类型的笔,比如毛笔和蜡笔。假设我们需要大、中、小三种类型的画笔来绘制12中不同的颜色,如果我们使用蜡笔,需要准备3*12=36支。但如果使用毛笔的话,只需要提供3种型号的毛笔,外加12个颜料盒即可,涉及的对象个数仅为3+12=15,远远小于36却能实现与36支蜡 阅读全文
posted @ 2020-05-30 14:25
delafqm
阅读(481)
评论(0)
推荐(0)
摘要:
在现实生活中,我们的笔记本电脑的工作电压大多数都是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够工作在220V的电压下工作?答案:引入一个电源适配器,俗称变压器,有了这个电源适配器,生活用电和笔记本电脑即可兼容。 在软件开发中,有时候也会存在这种不兼容的情况,我们也可以像电源适配器 阅读全文
posted @ 2020-05-30 14:11
delafqm
阅读(252)
评论(0)
推荐(0)
摘要:
我是谁,从哪来,到哪去 大白话说明创建型设计模式,方便记忆和理解 如:4S店买车 1、创建一个4S店 去XXX路的XX4S店,适合用单例模式创建,由于会有很多人会去4S店(就有点像多线程操作) 2、到店看车 4S店有很多车,有奥迪、宝马、奔驰等,适合建造者模式创建各种车辆,每种车都由车架,轮胎,内饰 阅读全文
posted @ 2020-05-30 11:18
delafqm
阅读(958)
评论(0)
推荐(0)
摘要:
建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。因为,没有人买车会只买一个方向盘或者轮胎,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件组成的完整汽车。如何将这些部件组装成一辆完整的汽车并 阅读全文
posted @ 2020-05-30 11:03
delafqm
阅读(191)
评论(0)
推荐(0)
摘要:
相信大多数的人都看过《西游记》,对孙悟空拔毛变出小猴子的故事情节应该都很熟悉。孙悟空可以用猴毛根据自己的形象复制出很多跟自己一模一样的小猴兵出来,其实在设计模式中也有一个类似的模式,我们可以通过一个原型对象来克隆出多个一模一样的对象,这个模式就是原型模式。 原型模式(Prototype) 学习难度: 阅读全文
posted @ 2020-05-30 10:54
delafqm
阅读(213)
评论(0)
推荐(0)
摘要:
上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销。那么,我们应该怎么来重构?似乎,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是本次 阅读全文
posted @ 2020-05-30 10:39
delafqm
阅读(110)
评论(0)
推荐(0)
摘要:
上一篇的简单工厂模式虽然简单,但是存在一个很严重的问题:当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背开闭原则。如何实现新增新产品而不影响已有代码?工厂方法模式为此应运而生。 工厂方法模式(Factory Method) 学习难度: 阅读全文
posted @ 2020-05-30 10:34
delafqm
阅读(119)
评论(0)
推荐(0)
摘要:
工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式。本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应用地比较频繁。此外,工厂方法模式还有一位“大哥”—抽象工厂模式,会在后面进行介绍。 简单工厂模式(S 阅读全文
posted @ 2020-05-30 10:22
delafqm
阅读(202)
评论(0)
推荐(0)
摘要:
单例模式属于创建型模式的一种,创建型模式是一类最常用的设计模式,在软件开发中应用非常广泛。创建型模式将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展。每一个创建型模式都在视图回答3个问题:3W -> 创建什么(What)、由谁创建(Who) 阅读全文
posted @ 2020-05-30 10:16
delafqm
阅读(246)
评论(0)
推荐(0)
摘要:
四、GitHub Pages搭建网站 4.1 个人站点 GitHub要求个人站点的仓库名称必须是 用户名.github.io, 例如edisonchou.github.io 建立方法很简单,也是新建一个repository,然后填写你的个人站点名,例如 edisonchou.github.io。之后 阅读全文
posted @ 2020-05-30 09:25
delafqm
阅读(268)
评论(0)
推荐(0)
摘要:
三、Git基本操作 3.1 安装Git 可以去官网选择下载,这里使用的是Git-2.9.0 64位版本:点我下载 全程傻瓜化安装,下一步即可,可以把命令模式和图形界面模式都勾选上。 3.2 Git基本流程 3.3 Git初始化操作及仓库管理 这里我们主要采用命令行模式,这也是Linux服务器的精髓所 阅读全文
posted @ 2020-05-30 09:23
delafqm
阅读(91)
评论(0)
推荐(0)
摘要:
二、GitHub基本操作 2.1 创建仓库 在GitHub中点击New repository活着Start a Project即可: 现在我新建一个仓库,这个仓库假设是我写的一个数据结构的实例程序Demo程序库: Step1.填写必要信息: Step2.浏览仓库主页 2.2 创建文件 在刚刚的仓库主 阅读全文
posted @ 2020-05-30 09:21
delafqm
阅读(368)
评论(0)
推荐(0)
摘要:
一、基本概念 1.1 必须了解的概念 (1)仓库 - Repository 仓库即你的项目,你想在GitHub上开源一个项目,那就必须要新建一个Repository。如果你开源的项目有多个,那么你就有多个Repositories。 (2)收藏 - Star 收藏项目,方便下次查看。如果你的项目被收藏 阅读全文
posted @ 2020-05-30 09:20
delafqm
阅读(229)
评论(0)
推荐(0)
摘要:
目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书《HTTP权威指南》与《TCP/IP详解,卷1》,但内容晦涩难懂,学习难度较大。其实,HTTP协议并不复杂,理解起来也不会花费太多学习成本,这本书的出现就及时缓解了该问题。对基础及核心部分的深入学习是成为一名专业技术人员的前提,以不变 阅读全文
posted @ 2020-05-30 08:56
delafqm
阅读(126)
评论(0)
推荐(0)
摘要:
一、国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识、掌握TCP/IP的基本技能。 书中讲解了网络基础知识、TCP/IP基础知识、数据链路、IP协议、IP协议相关技术、TCP与UDP、路由协议、应用协议、网络安全等内容,引导读者了解和掌握TCP/IP,营造 阅读全文
posted @ 2020-05-30 08:55
delafqm
阅读(129)
评论(0)
推荐(0)

浙公网安备 33010602011771号