测试不是问题,问题是怎么测试. ## 单元测试 我认为单元测试已经是无可争议的最佳开发实践之一.但是很多人并不同意这个观点.他们的说法无非是:写测试需要花很多时间,需求又经常变动,一但变动,一大片测试就作废了.这样又浪费时间,又降低效率. 但现实情况是:没有人不测试代码的.哪怕是最牛的开发者,也需要对自己写的代码进行测试.这一点可以去看<Coders at Work>.虽然有一些"牛人"测试的方法很原始--比如使用 `printf` 来查看运行结果.其实,从现代软件组件的角…
测试驱动开发 TDD(Test-Driven Development)是敏捷开发的一项核心实践,同时也是一种设计技术和方法. 既然是测试驱动,便是测试,测试用例先行: 首先编写好测试用例,期待值,实际值: 开发的目的是让测试运行通过: 开发围绕测试展开: 0. 常见测试方法 功能测试.单元测试.系统测试和负荷测试等: 1. 基本思想 在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码.TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming…
2016年11月,接受了一个工作,是对"悟空CRM"进行一些修补.这是一个不错的 CRM,开源,并提供一个 SaaS 的服务.正好微软的 .NET Core 和 ASP.NET Core 也发布了.于是就有了这个想法:使用 ASP.NET Core 来开发一个 CRM.当然这里面的私心是:朝后坦白讲,悟空CRM 的代码真的是不怎么样.大量的代码堆在 Controller 里,多个功能在一个 EndPoint 里混合.权限管理也有些乱来.View 里充满了"临时解决方案&quo…
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 CoreCRM 在 macOS 上的构建和测试任务交给它了. 我想国内已经有很多写怎么用 Travis-CI 的博客文章了,我就不需要在这里多费话了.当然,最好的文章其实就是 Travis-CI 的文档:最好的帮助都在 StackOverflow 和 GitHub 上.如果还觉得自己英语不够用,看不懂这些站的…
昨天(2016年12月29日)发了开始开发的文章.本来晚上准备在 Coding.NET 上添加几个任务开始搞起了.可是真的开始用的时候才发现:Coding.NET 的任务功能只针对私有的任务开放.我想Coding.NET 团队可能是出于商业的目的做出这样的选择,但这样我就没法把开发的过程开放出来了.但总要有一个项目管理的方法来展(dun)示(cu)我进行开发,于是我首先想到的是之前在用的团队协作工具:Worktile.然而,Worktime 也是一个针对封闭团队的工具(团队里的每个人都需要确定下…
单元测试的核心就是:只测试眼前的逻辑.这就要求所有的依赖项都要使用仿类来代替,也就是所谓的 Mock Object.在测试 ProfileRepository 和 AccountController 的时候,我遇到了需要对 UserManager 和 SignInManager 进行 Mock 的需求.因为这两个组件相互依赖,还依赖别的组件,我折腾了好一阵才搞定这个问题.具体和方法分两种:直接使用 Moq 进行 Mock 和使用 InMemory Database 进行 Mock.下面分别来说明…
虽然2月初就回来了,可 CoreCRM 一直到5月才开始恢复开发,期间是各种生活中的意外和不方便. 1. 为什么要重构 首先是一件很值得高兴的事情:CoreCRM 有了第一位 contributor!Larry 是我原来的一位 实习生,现在在某公司做前端开发.因为 Larry 的加入,我就不再是一个人战斗了.当然,也就得考虑怎么进行合作的事情了. 年前的开发计划是:使用 Bootstrap 按照悟空CRM的样子先弄出一个可以用的版本来.然后再使用一些比较好的后台前端框架来代替 Bootstrap…
再简单的功能,也需要一坨代码的支持.Profile 的编辑功能主要就是修改个人的信息.比如用户名.头像.性别.电话--虽然只是一个编辑界面,但添加下来,涉及了6个文件的修改和7个新创建的文件.各种生成的和手写的代码,共有934行之多. 1. Account 和 Profile 分离 什么是 Account?通常这个词被翻译成"帐户".我的理解是,这个 Model 里的内容,是为了登录而设计的.而 Profile 呢,应该保存那些和登录无关的附加信息,比如昵称.头像之类的.不过,有一点坑…
上一篇说到,因为有新朋友加入,对前端开发有了新的要求.原来基于 Bootstrap 的 UI 就不要了.在网上(其实是 GitHub 上)逛了几圈,最后使用了 antd-admin 这个框架做为基础模板,然后根据悟空 CRM 的特色进行了一些改变: 在原来的 antd-admin 的页面里,应该是属于 SPA 式的后台应用的.而 CRM 这样比较大的系统,完全 SPA 可能有点太大了.所以我就把第个模块拆出来做为一组 pages,这一组 pages 构成一个 SPA.这样,就需要在原来的右上导航…
测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量.本文从开发人员使用的角度,介绍了 TDD 优势.原理.过程.原则.测试技术.Tips 等方面. 转http://www.ibm.com/developerworks/cn/linux/l-tdd/index.html 终于明白了什么是TDD 背景 一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦.国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的…