技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

随笔分类 -  软件测试

1 2 下一页

JS单元测试框架:QUnit
摘要:QUnit:jQuery的单元测试框架,但不仅限于jQuery(从这个工具不需要引用jquery.js可以看出)index.html QUnit Example api.jsfunction sum(a, b){ re... 阅读全文

posted @ 2015-01-12 19:34 codestyle 阅读(412) 评论(0) 推荐(0) 编辑

编写优美的GTest测试案例
摘要:http://www.cnblogs.com/coderzh/archive/2010/01/09/beautiful-testcase.html使用gtest也有很长一段时间了,这期间也积累了一些经验,所以分享一下。GTest为我们提供了便捷的测试框架,让我们只需要关注案例本身。如何在GTest框架下写出优美的测试案例,我觉得必须要做到:案例的层次结构一定要清晰案例的检查点一定要明确案例失败时一定要能精确的定位问题案例执行结果一定要稳定案例执行的时间一定不能太长案例一定不能对测试环境造成破坏案例一定独立,不能与其他案例有先后关系的依赖案例的命名一定清晰,容易理解案例的可维护性也是非常重要,如 阅读全文

posted @ 2014-01-07 14:15 codestyle 阅读(1814) 评论(0) 推荐(0) 编辑

迈出单元测试的第一步
摘要:单元测试不仅是软件行业的最佳实践,在敏捷方法的推动下,它也成为了可持续软件生产的支柱。根据最新的年度敏捷调查,70% 的参与者会对他们的代码进行单元测试。单元测试和其他敏捷实践密切相关,所以开始编写测试是组织向敏捷转型的踏脚石。道路漫长,但值得去做。我将在本文介绍符合要求的小技巧,以及在开发周期里进行单元测试的步骤。有效的单元测试默认要能自动化。没有自动化,生产力就会下降。没有自动化,单元测试的习惯也不会持续太久。依靠手工测试(由测试人员或开发人员完成)并不能持续太长时间;在有压力的情况下,没人会记得去运行所有的测试,或者去覆盖所有的场景。自动化是我们的朋友,所有的单元测试框架都支持自动化,而 阅读全文

posted @ 2013-12-18 14:21 codestyle 阅读(293) 评论(0) 推荐(0) 编辑

Selenium IDE测试
摘要:判断WEB程序是否能打开页面,并且打开了正确的页面,可以通过assertTitle和assertLocation进行判断并且这些操作不需要提供value.target就是期望的URL和页面标题,因为command本身就已经说明了希望比对的页面元素是什么一旦没有通过assert的断言,则程序执行将停下来 ,info列表显示红色文字 阅读全文

posted @ 2013-12-09 14:09 codestyle 阅读(133) 评论(0) 推荐(0) 编辑

测试覆盖(率)到底有什么用?
摘要:http://www.infoq.com/cn/articles/test-coverage-rate-role引言经常有人问我这样的问题:“我们在做单元测试,那测试覆盖率要到多少才行?”。而我的答案很简单,“作为指标的测试覆盖率都是没有用处的。”Martin Fowler(重构那本书的作者)曾经写过一篇博客来讨论这个问题,他指出:把测试覆盖作为质量目标没有任何意义,而我们应该把它作为一种发现未被测试覆盖的代码的手段。http://martinfowler.com/bliki/TestCoverage.htmlBrian Marick(敏捷宣言最早的17个签署人之一)也说过,作为一名程序员,我 阅读全文

posted @ 2013-12-06 17:50 codestyle 阅读(1151) 评论(0) 推荐(0) 编辑

发现一个时隐时现的bug!
摘要:在awk里可以这样使用正则:#截取 a.cn?fr=1211 中的1211if(match(url,/fr=[0-9]+/) > 1){ fr = substr(url,RSTRART + 3, RLENGTH - 3 )}#截取 a.cn?ct=test 中的testif(match(url,/ct=[a-zA-Z]+/) > 1){ fr = substr(url,RSTRART + 3, RLENGTH - 3)}这样就导致一个需求:复用这些相似的代码 (我终于也培养成了代码洁癖 T_T)那么最先想到的是写成函数,到处调用。首先是功能模块:# 文件: logic/pars.. 阅读全文

posted @ 2013-11-26 16:22 codestyle 阅读(350) 评论(0) 推荐(0) 编辑

写给开发者:记录日志的10个建议
摘要:http://blog.jobbole.com/52018/欢迎在新的一年来到我的博客。在一个巴黎devops maillist上回复了一个关于监控和日志监控之后,我想起了很久以前我的一个博客计划。尽管在写这篇博文的时候,我是在负责运维工作,不过本文主要是写给开发者的。对我来说,明白如何记录日志和记录什么,是软件工程师必须明了的最艰巨的任务之一。之所以这么说,是因为这项任务与预测(divination)类似,你不知道当你要调试的时候需要些什么信息……我希望这10个建议能帮助你更好地在应用程序中记录日志,让运维工程师们受益。:)1. 你不应自己写log绝对不要,即便是用printf或者是自己写入 阅读全文

posted @ 2013-11-26 15:11 codestyle 阅读(970) 评论(0) 推荐(0) 编辑

gtest以及测试小结
摘要:所有的测试,都是让未知的东西和已知的东西进行比较,如果测试结果和预期的一样,那么就认为被测对象是OK的否则视为有问题。python的单元测试是写一堆继承了unittest.TestCase类,每个类里都会定义一个runTest函数,实际上这个函数是覆盖了基类的函数,脚本执行时调用unittest.main函数,unittest.main函数就会查找哪些类集成了TestCase并执行runTest函数那么到了gtest里也是类似的,不过因为gtest是C/C++的单元测试框架,而C/C++里能执行的都是可执行文件,所以需要把这些测试代码打进程序,然后用main函数来调用这些测试代码,但是我们是看 阅读全文

posted @ 2013-10-18 16:54 codestyle 阅读(1435) 评论(0) 推荐(0) 编辑

如何在项目中使用gtest1.6
摘要:问题gtest1.6版本的README里说该版本不支持make install,其意思就是说你没法通过make命令把gtest安装到/usr/local/lib之类的目录,所以你也没办法通过下面的命令来编译测试程序,那么该怎么使用gtest呢?g++ -lgtest -L /usr/local/lib -I gtest.h test.c方案假定已经把源码解压到当前用户的主目录下并且已经成功编译了,在gtest解压目录里有一个make目录(~/gtest-1.6.0/make),里面有一个Makefile文件,这个make脚本会使用同级别的sample目录下(~/gtest-1.6.0/samp 阅读全文

posted @ 2013-10-17 17:05 codestyle 阅读(732) 评论(0) 推荐(0) 编辑

gtest编译小结(ubuntu 12.10 , gtest 1.6.0)
摘要:1 下载源码,解压之当前用户的主目录(~/)2 进入make目录,执行make命令cd ~/gtest-1.6.0/makemake3 在ubuntu里编译出错,提示找不到lthread库。修改Makefile,在文件结尾:sample1_unittest : sample1.o sample1_unittest.o gtest_main.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@修改成(-lpthread 移到命令末尾):sample1_unittest : sample1.o sample1_unittest.o gtest... 阅读全文

posted @ 2013-08-01 18:29 codestyle 阅读(497) 评论(0) 推荐(0) 编辑

如何用googletest写单元测试
摘要:http://www.uml.org.cn/c++/201203293.aspgoogletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。本文包括以下几部分:1、获取并编译googletest(以下简称为gtest);2、如何编写单元测试用例;3、如何执行单元测试。4、google test内部是如何执行我们的单元测试用例的。1. 获取并编译gtestgtest试图跨平台,理论上,它就应该提供多个版本的binary包。但事实上,gtest只提供源码和相应平台的编译方 阅读全文

posted @ 2013-08-01 17:37 codestyle 阅读(505) 评论(0) 推荐(0) 编辑

gtest
摘要:参考文章http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html阿里的oceanbase用的就是这个库,看来很值得一学啊 阅读全文

posted @ 2013-07-18 14:06 codestyle 阅读(205) 评论(0) 推荐(0) 编辑

一个BUG的发现过程
摘要:首先是项目代码:statAd是我的功能模块API,他的功能定义是累加某个广告在某个投放位置的pv和uv(存到一个全局数组LIST里)详细说明:pv的概念大家很清楚就是浏览广告的人次,uv的概念则是某个时间段内,浏览过的人数(非人次,一人浏览多次算多个PV但只算一个UV);输入其实是已经经过初步计算的数据,它标识了一个人在某个页面浏览过某过个广告的次数,但是一个广告可以投放到多个页面,所以一个人可以在不同页面浏览相同的广告,这在输入数据里就会被当做多笔输入;下面是这个API的输入输出定义输入:userid(用户身份),adid(广告标示),adflag(广告投放位置),pv(该人已在此广告位置浏 阅读全文

posted @ 2013-05-22 20:16 codestyle 阅读(1391) 评论(1) 推荐(1) 编辑

日志系统级别设定
摘要:CFANS·梦断代码11:16:53请教你一个问题CFANS·梦断代码11:18:25在一个系统里要使用日志,这个日志级别怎么设定,哪一些数据或者动作是调试才需要的,哪些即使上线也还需要CFANS·梦断代码11:18:47你们的项目日志的方案或者规范是个什么样子方开宇11:21:05这个没有特定的标准。一般是流程中的结果数据,需要定为常规日志,流程中可变的具有含义的临时数据,定为调试数据方开宇11:22:08所有捕捉到的异常定义为error级别CFANS·梦断代码11:23:29和外部进行交互的接口,是不是上线以后还需要记录?CFANS·梦断代 阅读全文

posted @ 2012-12-28 11:48 codestyle 阅读(1618) 评论(0) 推荐(0) 编辑

白盒测试和黑盒测试(感谢东子哥作答)
摘要:Q: 如何给这个函数做白盒测试,黑盒测试,该函数有无错误//被测接口float avg(float *list,int count){ float sum = 0.0; for(int index = 0;index < count;index++) sum += list[index]; return sum / count;}A:float avg(float *list,int count)黑盒:用例测试白盒:code review这个白盒结果:1.没有注释2.没有处理list为空的情况3.没有处理count为0或负数的情况4.没有处理指针溢出5.没有处理... 阅读全文

posted @ 2012-12-01 16:20 codestyle 阅读(369) 评论(0) 推荐(0) 编辑

测试用例的代码复用
摘要:创建笔记用例(创建笔记之前需要先登录)登录用例 阅读全文

posted @ 2012-11-21 13:20 codestyle 阅读(257) 评论(0) 推荐(0) 编辑

骆驼命名法(Camel Case)
摘要:团队编码风格:类名,模块名,文件名 大驼峰命名法(Upper Camel Case)方法名,变量,小驼峰命名法(Lower Camel Case)常量可以用全大写加下划线或大驼峰命名法重构:类以上的名称不允许重复删除无用代码代码分段编写 阅读全文

posted @ 2012-11-19 19:10 codestyle 阅读(912) 评论(0) 推荐(0) 编辑

mock对象3:前进!用库和引用屏蔽掉业务对象和mock对象
摘要:引言上次给我领导演示过mock对象,领导觉得很好,不过他觉得这个方案不完美,因为我们通过一个基类对象屏蔽掉了业务对象和mock对象,虽然从接口上看,看不出这两者的区别,但是对于现有程序,为了造出mock对象进行测试,还要先重构程序才能做到这一点,领导觉得不爽,他想要一种完全透明的解决方案,不修改现有的任何一行代码,就能在业务对象和mock对象之间进行切换,我想了一下,觉得似乎可以通过导入不同库来解决,也就是说我写一个动态链接库项目,定义和业务对象具有相同名字,方法,属性的类,由于上次演示的业务对象其实是系统的库(System.Messaging)系统库在.NET的技术框架下是通过引用导入到项目 阅读全文

posted @ 2012-11-19 14:02 codestyle 阅读(464) 评论(0) 推荐(0) 编辑

再写mock对象2
摘要:上文描述的是读写系统的内置类型,如果是我们自定义的类型又怎么样呢,于是进行了一次测试,添加一个动态链接库项目,并引用到进行读写的两个项目里,下面是测试代码自定义类型using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ElementX{ public class DataX { public string s; }}写入项目using System;using System.Collections.Generic;using Syst... 阅读全文

posted @ 2012-11-17 02:22 codestyle 阅读(162) 评论(0) 推荐(0) 编辑

再写mock对象
摘要:上次写的mock对象的程序,其实并未真正的运行成功,因为当使用真正的业务对象从计算机真实的消息队列读取数据时,转换成为object类型传给使用程序时会产生一个异常(出现在把message.body转成object类型,说是没有匹配的格式对象),我设计意图是该消息队列读取类应该和读出的数据类型无关,它就是一个通用的处理程序,所以接口才会定成object,我不想违反自己的设计理念,加之是仓促为朋友写的代码,自己没有环境就放弃调试这个程序,何况上文重点是介绍,如何利用mock取代真实对象,但是最近还是想弄明白所以调试了一下,最新代码如下:核心模块的代码using System;using Syste 阅读全文

posted @ 2012-11-17 02:17 codestyle 阅读(392) 评论(0) 推荐(0) 编辑

1 2 下一页