该系列第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 本文是第2篇, 介绍的是如何避免在构建对象时写出不易测试的代码. 本文的概念性内容大部分都来自Misko Hevery的这篇博客文章. 构建 还是用上文里汽车的例子. 通常情况下, 我们是先去建造汽车, 组装好汽车后, 我们再去驾驶它. 软件开发也类似, 我们应该把对象构造完毕之后, 再去用它. 但是有时候, 开发者会在构造过程中添加一些程序逻辑. 这就相当于车还没造完, 我们就驾驶它去…
有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试.... 举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到“车祸”. 为什么要测试/测试的好处 它可以尽早发现bug, 解决bug 它会节省开发和维护一个软件的总成本. 实际上我们在维护软件上付出的成本要远大于在开发时付出的成本. 开发的时候编写单元测试确实会增加一些成本, 但是从长远来看这些测试还是会从维护上降低软件的总成本…
转载于: https://www.cnblogs.com/cgzl/p/9365955.html 有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试.... 举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到“车祸”. 为什么要测试/测试的好处 它可以尽早发现bug, 解决bug 它会节省开发和维护一个软件的总成本. 实际上我们在维护软件上付出的成本要远大于在开发时付出的成本.…
第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 本文是第4篇, 将介绍全局状态引起的问题. 全局状态 全局状态, 也可以叫做应用程序状态, 它是一组变量, 这些变量维护着应用程序的高级状态. 在程序里, 全局状态可能都存放在一个全局状态对象里, 例如ASP.NET里面的HttpContext; 或者它们可能是全局的变量, 这些全局变量在程序的任何地方都可以访问.…
第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 第4篇, 全局状态引起的问题. 本文是第5篇, 也是最后一篇, 介绍的是单一职责 类做了太多的工作 例子, 某软件公司, 原有项目开发, 测试, 售前, 售后, 财务等员工. 后来由于公司没钱, 裁掉了测试, 让开发兼职; 过了段时间, 又裁掉了需求和售后, 还是由你这个开发来兼职; 再过了段时间, 又裁掉了财务和…
第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 本文是第3篇, 讲述依赖项和迪米特法则. 迪米特法则 (Law of Demeter) 还是使用建造汽车的例子. 生产汽车的时候需要轮胎, 组装时需要什么型号的轮胎, 就请求该型号的轮胎, 然后相关人员会从库房把该型号的轮胎送到产线用于组装. 我相信很少有汽车厂会这样做: 生产汽车时, 汽车组装工拿着库房的钥匙, 自己去库房从各种各样的轮胎中找所…
本书介绍 JavaScript专业开发人员必须具备的一个技能是能够编写可测试的代码.不管是创建新应用程序,还是重写遗留代码,本书都将向你展示如何为客户端和服务器编写和维护可测试的JavaScript代码. 从减少代码复杂性的方法,到单元测试.代码覆盖率.调试.以及自动化,您将全面学到如何编写让你和你同事能够轻松修复和维护的JavaScript代码.测试JavaScript代码是一个复杂的过程.本书将在很大程度上帮你简化该过程. 目标读者 本书主要目标受众是那些想成为JavaScript专业开发人…
<编写可测试的JavaScript代码>基本信息作者: [美] Mark Ethan Trostler 托斯勒 著 译者: 徐涛出版社:人民邮电出版社ISBN:9787115373373上架时间:2015-1-24出版日期:2015 年2月开本:16开页码:247版次:1-1   内容简介<编写可测试的JavaScript代码>JavaScript专业开发人员必须具备的一个技能是能够编写可测试的代码.本书的目标是教授如何为客户端和服务器编写和维护可测试的JavaScript代码.全…
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和前后端分离那些事儿>上,我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core的前后端分离有关的技术路线上持续发散,由于各种原因未能成功,因此,技术社区执行主席,李文强同学整理了一张图,并由溪源以专刊的形式来描述他所认为的技术演进之路.  这张图涉及到的知识点,涵盖了目前前后端技术近…
编写Avocado测试 现在我们开始使用python编写Avocado测试,测试继承于avocado.Test. 基本例子 创建一个时间测试,sleeptest,测试非常简单,只是sleep一会: import time from avocado import Test class SleepTest(Test): def test(self): sleep_length = self.params.get('sleep_length', default=1) self.log.debug("S…
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前端框架演示地址(临时) 地址:http://nm.demo.iamoldli.com/index.html 账户:admin 密码:admin 一.目录 1.开篇 2.快速创建一个业务模块 3.数据访问模块介绍 4.模块化实现思路 二.实现快速开发的前提条件 NetModular实现快速开发有两…
ASP.NET Core文件上传与下载(多种上传方式)   前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧. 正文 1.使用模型绑定上传文件(官方例子) 官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads 这里吐…
随着敏捷开发的蓬勃发展.遍地开花,TDD(Test Drive Development测试驱动开发)的概念已经深入软件研发从业者的心中. TDD讲究的是:“测试在先.编码在后”.有别于以往的“先编码.后测试”的开发过程,而是在编程之前,先写测试脚本或设计测试用例. “测试先行”,使得开发人员对所做的设计或所写的代码有足够的信心,同时也有勇气进行设计或代码的快速重构,有利于快速迭代.持续交付. 严格来说,TDD是一种开发实践. 从软件开发角度来看,TDD是很棒的! 然而,把需求分析整理,软件开发,…
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴级别”的前端开发人员,大牛请绕过. 1,下载安装Node.js 去 Node.js 官网下载一个Windows环节的安装包 node-v6.2.0-x64.rar 文件,一路安装下去即可.官网访问很慢,可以试试中文网 http://nodejs.cn/ 2,配置Vue环境 一开始看<基于Webpac…
前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天才研究批量导入功能,本节顺便简单搞搞导入.导出,等博主弄妥当了再来和大家一并分享. .NET Core MVC上传 首先我们来看看官网的上传的例子,再然后进行拓展训练,官网的表单是这样的. <form method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-ac…
博弈论(Game Theory) - 01 - 前传之占优战略均衡 开始 我们现在准备攀爬博弈论的几座高峰. 我们先看看在纳什均衡产生之前,博弈论的发展情况. 我们的第一座高峰是占优战略均衡. 囚徒困境(prisoner's dilemma)和占优战略均衡 囚徒困境 经典的囚徒困境如下: 警方逮捕甲.乙两名嫌疑犯,但没有足够证据指控二人入罪.于是警方分开囚禁嫌疑犯,分别和二人见面,并向双方提供以下相同的选择: 若一人认罪并作证检控对方(相关术语称"背叛"对方),而对方保持抵赖,此人将即…
博弈论(Game Theory) - 02 - 前传之重复剔除严格劣战略的占优战略均衡 开始 "重复剔除劣战略的严格占优战略均衡"(iterated dominance equilibrium),简称为"重复剔除的占优战略均衡". 智猪博弈和重复剔除的占优战略均衡 智猪博弈问题 在一个猪圈里养着一头大猪和一头小猪,在猪圈的一端放有一个猪食槽,在另一端安装有一个按钮,它控制着猪食的供应量.假定: 按一下按钮,就有8单位猪食进槽,但按动按钮需支出2单位成本: 若大猪先到…
博弈论(Game Theory) - 03 - 前传之最大最小均衡 开始 最大最小均衡是由人冯·诺依曼和摩根斯坦提出.冯·诺依曼和摩根斯坦也被认为是博弈论的创始人. 冯·诺依曼提出的"最大最小定理"能保证在非常一般的情况下,两人零和博弈总是存在"最大最小均衡". 最大最小均衡存在以下问题: "最大最小"均衡没有考虑到局中人之间在策略选择上的互动. 由"最大最小"方法得到的"均衡"很难说是一种"均衡…
根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: * A:定义一个字符串 * B:把字符串转换为字符数组 * C:把字符数组进行排序 * D:把排序后的字符数组转成字符串 * E:输出最后的字符串 */ public class ArrayTest { public static void main(String[] args) { // 定义一个字符串 S…
使用FsCheck编写Property-based的测试 在编写基于Property-based的单元测试一文中,我们介绍了什么是Property-based测试.同时我们也总结了Property-based测试的两个策略: 随机产生若干个输入值,保证足够多的测试用例 断言被测代码具有普遍适应性的属性 FsCheck是一个F#版本的QuickCheck移植版本,本文将介绍如何使用FsCheck. 初识FsCheck FsCheck是一个用来编写Property-based测试的工具,开发者通过总…
Android-自定义View前传-View的三大流程-Layout 参考 <Android开发艺术探索> https://github.com/hongyangAndroid/FlowLayout 写在前头 在之前的文章中 , 我们学习了Android View的 Measure的流程, 本篇文章来学习一下View的 Layout 的过程. 学完了这一篇文章后,我们可以尝试自己去自定义一个自己的Layout. Overview 我对于Layout过程的理解:Layout的过程就是给Child…
Android自定义View前传-View的三大流程-Measure 参考 <Android开发艺术探索> https://developer.android.google.cn/reference/android/view/View.MeasureSpec 写在前面 View的 measure .layout draw 的三大流程的重要性不用多说,只有学习这三大流程,清楚了View的工作方式,才能够在进行 自定义View 的时候更得心应手.在学习三大流程的时候,需要看很多的相关的源码,其中有…
本文主要介绍后台接收处理 1.在使用控制器接收 : [HttpPost] : public IActionResult UploadFiles(IList<IFormFile> files) : { : ; : foreach(var file in files) : { : var filename = ContentDispositionHeaderValue : .Parse(file.ContentDisposition) : .FileName : .Trim('"');…
(转)Groupon前传:从10个月的失败作品修改,1个月找到成功 今天读到 一个非常励志人心的故事 ,就像现在「叶问」有「前传」,最近很火红的团集购网站Groupon 也出现了「Groupon前传」 ,就在两周前,在纽约的一场定期聚会的创业家,有幸听到这个「Groupon前传」的故事,由创办人Andrew Mason的口中讲出来. 现在大家都觉得Groupon很有道理了,大家都在抄这个点子,但是,当初,这位创业家是怎么想到这个点子的?是怎么想到可以这样做这个点子的呢? 答案:「 他原本并不是做…
在我们熟知的建立在三层结构(表示层.业务逻辑层.持久层)基础之上的J2EE应用程序开发之中,表示层的解决方案最多.因为在表示层自身的知识触角很多,需要解决的问题也不少,这也就难免造成与之对应的解决方案层出不穷. 笔者在很多讨论中经常可以看到类似“某某框架已死”,或者“某某框架已经足以打败所有其他的框架”的言论.事实上,每一种解决方案都有着自身独有的存在价值和历史背景.如果单单从某一个方面或者某几个方面去看一个框架,那么评论难免有失偏颇. 所以,整个系列的第一篇文章,我们脱开SpringMVC框架…
Caffe学习笔记(二):Caffe前传与反传.损失函数.调优 在caffe框架中,前传/反传(forward and backward)是一个网络中最重要的计算过程:损失函数(loss)是学习的驱动,类似于视频编码中的率失真代价,是衡量学习的程度,或者说,学习的目的是找到一个网络权重的集合,使得损失函数最小:Solver是通过协调网络的前向推断计算和反向计算来对参数进行更新,从而达到减小loss的目的. 下面将对forward and backward.loss.solver分别进行介绍. 1…
用到的注解: @Test:测试方法 @Before:初始化方法. @After:是否资源. 先执行Befere,然后执行Test,最后执行After. 第一步:新建一个Junit目录. 第二步:取名 该目录下新建一个类: 代码如下: import org.junit.After; import org.junit.Before; import org.junit.Test; //测试类 public class StudentsTest { @Before public void init()…
源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前端框架演示地址(临时) 地址:http://nm.demo.iamoldli.com/index.html 账户:admin 密码:admin 目录 1.开篇 2.快速创建一个业务模块 3.数据访问模块介绍 4.模块化实现思路 获取官方源码 为了方便查看源码,我们先获取下官方的源码 下载 AspNe…
net core分块上传文件   写完asp.net多文件上传(http://www.cnblogs.com/bestckk/p/5987383.html)后,感觉这种上传还是有很多缺陷,于是...(省略一万字,不废话).这里我没用传统的asp.net,而选择了开源的asp.net core,原因很简单,.net core是.net新的开始,更是.net和.net开发者的未来,希望.net发展越来越好(大家的工资越来越高(●ˇ∀ˇ●)). 1.前端的实现: 1).html: 1 <html>…
本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写的控制台程序要好. 本文所说的编写控制台程序应有的“正确”方法,我把正确二字加上引号,因为没有绝对的正确,因人而异,因系统设计需求而异,我这里所谓的正确方法是指使用面向对象,依赖注入IOC,切面控制AOP等编码规范来提升程序的性能.整洁度.可读性.可维护性等,最终达到让人感觉有点高大上,有点优雅的样…