第一屏:pc
第二屏:智能手机
第三屏:pad平板
第四屏:互联网电视
第五屏:互联网汽车屏幕
第六屏:互联网眼睛
posted @ 2013-02-22 15:58 小马歌 阅读(292) | 评论 (0)编辑 收藏
 

from:http://www.nonoidea.com/2013/02/21/%E6%8B%9B%E4%BA%BA%E7%9A%84%E5%9B%B0%E5%A2%83/

Posted by 王淮Harry

最近和几家公司聊到了初创公司找人的问题。

我一直强调,过了concept proof的公司,马上要把招人放到最重要的位置上。一个靠谱的CEO,他最重要的需要attention to details的就两件事 – 产品和招人。

但初创公司招人绝对不容易。

拼钱,拼不过TABLES这几大巨头。他们基本上把国内顶端的几所大学的毕业生出路买断了。手段非常粗鲁。一个研究生毕业生,没有20万的offer都不好意思回家过年。

工作几年还行的就更贵了。

怎么办?

几点供参考:


朋友

出门靠朋友,创业更是。一开始,就那么几个人,几只枪,跟着你的,只能是兄弟姐妹几个。这一点,在美国也是。看看Yahoo, Google, Apple, Facebook等等等等。

同学绝对是创业伙伴(founding team)最好的来源渠道。价廉物美,互相不欺。

同事也不错。以前的小弟,以前的大哥。一起吃过盒饭,一起骂过老板(或被骂过)。

一起跋山涉水,灯红酒绿的腐败爱好分子也挺好。拓词就是从爬山社的一群人爬着爬着就起来了。

还有在活动上碰上,一直念念不忘,偶尔讨论点东西,经常勾搭一下的geek男们。

这种人才能在一起打天下之前能够耐得住寂寞,因为之前拥有的很多经历,才有了创业必须的信任和坚持。


朋友的朋友

“哥们,帮我把话传出去,我要找前锋”

朋友在乎你,会时常帮你惦记着这事;已经加入你的队伍更是不在话下。碰上靠谱的人选,把你们撮合到一起。Facebook早年的20、30个人中好多都是你拉我,我拉你拉过来的。

因为拉人的和被拉的中间有一个可以被信任的朋友,这事好办多了。


internship

去学校招人,基本上一创业公司,开不了有竞争力的薪资,只靠画大饼找到最好的人,基本上很难。

Facebook,还在被称为Thefacebook的时候,当年直接在Stanford Google的人才招聘会上摆了一张桌子,写着why working for google, come to thefacebook之类的话,基本上还是吸引来了一些实习生。

没错,基本只能吸引实习生。

那这是非常好的一个起点。因为,当中好几个转成全职后是后来很牛逼的工程师。

在别人了解你之前,画饼是没用的。来了之后,天天洗脑,夜夜画饼,然后真诚的出动公司里的男女老少兽(别误会,我对堆糖收养的几只可爱的小猫念念不忘)来吸引一个好的人。这个时候,你的10万年薪,加上产品愿景,团队魅力和公司期权的魔法增强,完全可以对坑别人霸道的20万。


活动

各种创业活动其实给很多有心想招人的初创团队一些机会去找到合频的人。

什么叫合频的人。

创业是一种life style。经常参加创业活动,但身在大公司的很多人,他们的心已经入了创业的界内。有了这份心加上足够的聪明和努力,培养,获得创业公司需要的能力不难。

但要把一个有能力的人,却已习惯并享受大公司生活的人,训练成创业的人才,非常难,非常难。

在几次讲座中,我都提到,多和一起来听讲座的左邻右舍聊几句,说不定,这人以后就成了你的同事,创业伙伴。当年,好几位就是通过这种方式认识被我拉到Facebook里面。


多混创业的这个圈子

创业其实是很孤独的事。在这个圈子里面徘徊的都是有理想的人。这些人都非常值得尊重(原谅我没办法一一认识,实在个人时间有限)。经常互相帮助,说不定哪天大家就合作了,或者合并了。

是的,合并了。Storm8, 一家2011年就值10亿美金的手游公司,是我们原来组的同事Perry Tam和几个同事出来创办的。后来我们组的另外一个香港人William也离职了,创业。Perry给他提供了免费的办公室,来吧,先在我这干着吧。半年后,原本铁了心创业的William加入了Storm8。


发帖子

都不行,那就到处贴小广告吧。一很牛逼的创业者就和我讲过一个他写了一个英雄帖贴了很多论坛然后面试了上百人的事迹。究竟性价比如何无可置评,一腔热血可圈可点。

我以为,创业,最难的是两点,产品和招人。招人,不能拼钱财,那是大公司的游戏。拼的是你的饼。这不仅取决于饼要画的好,也取决于对画饼人,画饼的团队的信任。

The key to hiring for startup, is to find or build the trust.

posted @ 2013-02-22 10:28 小马歌 阅读(268) | 评论 (0)编辑 收藏
 

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的。这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能。

1. Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理。根据项目网站的说法,Grinder的 主要目标用户是“理解他们所测代码的人——Grinder不仅仅是带有一组相关响应时间的‘黑盒’测试。由于测试过程可以进行编码——而不是简单地脚本 化,所以程序员能测试应用中内部的各个层次,而不仅仅是通过用户界面测试响应时间。

The Grinder

2. Pylot -Pylot是一款开源的测试web service性能和扩展性的工具,它运行HTTP 负载测试,这对容量计划,确定基准点,分析以及系统调优都很有用处。Pylot产生并发负载(HTTP Requests),检验服务器响应,以及产生带有metrics的报表。通过GUI或者shell/console来执行和监视test suites。

Pylot Main Logo

2. Web Capacity Analysis Tool (WCAT) – 这是一种轻量级负载生成实用工具,不仅能够重现对 Web 服务器(或负载平衡服务器场)的脚本 HTTP 请求,同时还可以收集性能统计数据供日后分析之用。WCAT 是多线程应用程序,并且支持从单个源控制多个负载测试客户端,因此您可以模拟数千个并发用户。该实用工具利用您的旧机器作为测试客户端,其中每个测试客户端又可以产生多个虚拟客户端(最大数量取决于客户端机器的网络适配器和其他硬件)。您可以选择使用 HTTP 1.0 还是 HTTP 1.1 请求,以及是否使用 SSL。并且,如果测试方案需要,您还可以使用脚本执行的基本或 NTLM 身份验证来访问站点的受限部分。(如果您的站点使用 cookie、表单或基于会话的身份验证,那您可以创建正确的 GET 或 POST 请求来对测试用户进行身份验证。)WCAT 还可管理您站点可能设置的任何 cookie,所以配置文件和会话信息将永久保存。

3. fwptt – fwptt 也是一个用来进行WEB应用负载测试的工具。它可以记录一般的请求,也可以记录Ajax请求。它可以用来测试 asp.net, jsp, php 或是其它的Web应用。

4. JCrawler – JCrawler是一个开源( CPL) 的WEB应用压力测试工具。通过其名字,你就可以知道这是一个用Java写的像网页爬虫一样的工具。只要你给其几个URL,它就可以开始爬过去了,它用一种特殊的方式来产生你WEB应用的负载。这个工具可以用来测试搜索引擎对你站点产生的负载。当然,其还有另一功能,你可以建立你的网站地图和再点击一下,将自动提交Sitemap给前5名的搜索引擎!

5. Apache JMeter – Apache JMeter是一个专门为运行和服务器装载测试而设计的、100%的纯Java桌面运行程序。原先它是为Web/HTTP测试而设计的,但是它已经扩展以支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库中的服务器的运行情况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换的界面用来定制数据显示,测试同步及测试的创建和执行。

6. Siege -Siege(英文意思是围攻)是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。 Siege 支持基本的认证,cookies, HTTP 和 HTTPS 协议。

7. http_load – http_load 以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。可以可以测试HTTPS类的网站请求。

8. Web Polygraph – Web Polygraph这个软件也是一个用于测试WEB性能的工具,这个工具是很多公司的标准测试工具,包括微软在分析其软件性能的时候,也是使用这个工具做为基准工具的。很多招聘测试员的广告中都注明需要熟练掌握这个测试工具。

9. OpenSTA – OpenSTA是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。

来源:10 Free Tools to Load/Stress Test Your Web Applications

posted @ 2013-02-21 16:27 小马歌 阅读(296) | 评论 (0)编辑 收藏
 
     摘要: 过去就连一个镜像站点,我们都依靠大量的开发人员和程序员进行维护。得益于CSS和它的灵活性使得样式能够从代码中被独立抽离出来,从而让一个只具备基本CSS理论的初学者都能够轻易地改变网站的样式。  不论你是对用CSS建站感兴趣还是仅仅拿它让你的博客更有feel,打好基础才能盖高楼。下面让我们来看看一些对于初学者实用的CSS常识: 1、使用reset.css  火狐和IE这两种不同的浏览器,在绘制CSS...  阅读全文
posted @ 2013-02-21 16:12 小马歌 阅读(229) | 评论 (0)编辑 收藏
 

介绍20个非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法。

图表库

下面的类库可以让你很简的创建复杂的图表和图片。当然,它们需要GD库的支持。

pChart – 一个可以创建统计图的库。

Libchart – 这也是一个简单的统计图库。

JpGraph – 一个面向对象的图片创建类。

Open Flash Chart – 这是一个基于Flash的统计图。

缩略图生成

phpThumb – 功能很强大,如何强大还是自己去体会吧。

支付

你的网站需要处理支付方面的事情?需要一个和支付网关的程序?下面这个程序可以帮到你。

PHP Payment Library – 支持Paypal, Authorize.net 和2Checkout (2CO)

RSS 解析

解释RSS并是一件很单调的事情,不过幸好你有下面的类库可以帮助你方便地读取RSS的Feed。

MagpieRSS – 开源的PHP版RSS解析器,据说功能强大,未验证。

SimplePie – 这是一个非常快速,而且易用的RSS和Atom 解析库。

OpenID

PHP-OpenID – 支持OpenID的一个PHP库。OpenID是帮助你使用相同的用户名和口令登录不同的网站的一种解决方案。如果你对OpenID不熟悉的话,你可以到这里看看:http://openid.net.cn/

PDF 生成器

FPDF – 这量一个可以让你生成PDF的纯PHP类库。

Excel 相关

你的站点需要生成Excel?没有问题,下面这两个类库可以让你轻松做到这一点。

php-excel – 这是一个非常简单的Excel文件生成类。

PHP Excel Reader – 可以解析并读取XLS文件中的数据。

E-Mail 相关

不喜欢PHP的mail函数?觉得不够强大?下面的PHP邮件相关的库绝对不会让你失望。

Swift Mailer – 免费的超多功能的PHP邮件库。

PHPMailer - 超强大的邮件发送类。

数据为抽象/对象关系映射ORM

ADOdb – 数据库抽象

Doctrine – 对象关系映射Object relational mapper (ORM) ,需要 PHP 5.2.3+ 版本,一个非常强大的database abstraction layer (DBAL).

Propel – 对象关系映射框架- PHP5

Outlet – 也是关于对象关系映射的一个工具。

注:对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示者额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。

单元测试

如果你在使用测试驱动的方法开发你的程序,下面的类库和框架绝你能帮助你的开发。

SimpleTest – 一个PHP的单元测试和网页测试的框架。

PHPUnit – 来自xUnit 家族,提供一个框架可以让你方便地进行单元测试的案例开发。并可非常容易地分析其测试结果。

posted @ 2013-02-21 16:09 小马歌 阅读(177) | 评论 (0)编辑 收藏
 
 手机应用内支付包支付文档

https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash

下载地址:
http://download.alipay.com/public/api/base/WS_SECURE_PAY.zip 
posted @ 2013-02-21 16:08 小马歌 阅读(263) | 评论 (0)编辑 收藏
 

感谢西的投递
我一直还记得在《软件开发如同越狱》这篇文章的第一句话“如果说这世界上还有另外一种东西太多了,那就是对软件开发的类比……”,如果你记性好的话,你应该对“如果编程语言是….”这种模式的标题很眼熟,没错,那你是一定看过了《 如果编程语言是一条船…》 这篇文章。今天的这篇文章又是模仿这个套路,但相似并不是相同,正如桔子和橙子各有味道一样,主要是过年了,让大家乐一乐。

赛车总动员

我本想在下面每个评述的后面都 配一张图,但由于有些描述很抽象,不知道配什么样的图合适,如果有朋友能给出推荐,请把图片地址写在评论里,我会把合适的图片补充到下面的文章里,谢谢。

Ada

Ada语言是辆坦克。一辆笨重丑陋但绝不会在路上抛锚的坦克。如果你告诉别人你开的是坦克,人们可能会笑弯腰,但事实上,如果上战场,你愿意开一辆跑车在阵地上跑吗?

Assembly

汇编语言只是一台发动机;你需要自己用它造出这部车,而且在跑起来时你还需要手工给它供给汽油,但是,如果你能足够用心,它能跑的像一个飞向天际的火箭。

Basic

Basic是一辆简单的车,你可以把它当成短距离的交通工具,比如去附近的超市购物。它曾经在驾车新手中风靡一时,但最近被一个大制造商给拆解的剩下一个壳,重新改造成了新的样式,新款的车能跑更远的路,与最初的款型相比只是在外观上看起来相似罢了。

c

C语言是一部跑的极快的赛车,但每50公里都要修理一次。

C++

C++是C型赛车的加强版,增添了很多额外的功能,现在只是每250公里才熄火一次,但问题是,一旦熄火了,没有人知道是什么原因。

Cobol

Cobol语言号称是一辆车,但没看到过有自尊的人承认驾驶过它。

C#

C#是一款很有竞争力的商务旅行车。一旦用上这种车,你就再也没有机会去用其它厂家的同类车。

Eiffel

Eiffel是一款预先配备了陪驾的轿车,但这个陪驾有明显的法国口音。他能帮助你快速的发现驾驶中犯的错误,并从中吸取教训,但千万不要和他争执,否则他会对你动粗,把你抛出车外。

Erlang

Erlang是一个车队,它们齐心合力把你送到你想去的地方。你需要经验来掌控这么多车下的每个轮子,但一旦你学会了,它能让你跑在其它方法无法到达的地形上。除此之外,因为你是在驾驶一大群车,所以,即使有一些车途中抛锚熄火了也不要紧。

Forth

Forth是一辆你自己用小器械组装的车。你的车子在外观上或在开动方式上的确没有必要和别人的车保持一致。然而,Forth是一辆只能倒着跑的车。

Fortran

Fortran是一辆非常简单的车,它能跑的很快,但条件是你必须沿着一条非常直的路开。很多人都相信,一旦学会了开Fortran车,你就不可能再学会开其它类型的车。

Java

Java是一款商务旅行车。它很容易驾驶,跑的不是很快,也不会让你伤着自己。

Haskell

Haskell是 款设计的非常优雅、外观惊艳的车,传言她能在地形极其特殊的地方行驶。你第一次试图驾驶它,它可能不会沿着路走,事 实上,它是一步步的复制自己脚下的路而后在上面复制自己,这样复制路——复制自己,自己也就前进一段。理论上你是可以按常规的方式来驾驶它前进的,只是你 没有足够的数学知识来做到这些。

Lisp

Lisp 看起来像是部车,但如果能捣鼓,有足够的耐心,你能把它编程一架有相当战斗力的飞机或潜艇。[来自 Paul Tanimoto:]Lisp: 起初看起来它完全不像一部车,但时不时你会在街上看到有人驾驶这样的车。于是你决定学一下如何驾驶它,你发现它确实是辆车,而且它能变出很多车。你把这事 告诉你的朋友,但他们都笑你,说这车的样子也太古怪了。你仍然在车库里放着这样一部车,期望有朝一日大街小巷跑的都是这样的车。

Mathematica是一辆精心设计的车,借鉴了很多Lisp车上的思想,但没有向Lisp表示过基本的感谢。它能通过方程式来判断走哪条路上捷径,但这是有成本的。

Matlab

Matlab是一款为初学者设计的车,它能跑不是很长的路程,跑在类似Mathematica车能跑到那种地形上。在这种地形上它驾驶起来很舒适,但绝对不能跑偏,否则你很难控制。正因为如此,势利小人甚至拒绝承认它是一部车。

Ocaml

Ocaml是一部非常性感的欧版车。它没有C车那样快,但它从来不出故障,所以,最终还是它用了最短的时间到达目的地。然而,因为它是法式的,没有一个控制杆/按钮是安放在通常的位置上的。

Perl

Perl被认为是一款很酷的车,但驾驶手册不完备。还有,即使你能知道如何驾驶这辆Perl车,你未必就知道如何驾驶其它的Perl车。

PHP

PHP是那种美国Oscar Mayer公司的热狗车(Wienermobile),它样子古怪,不好开,但每个人仍然都想驾驶它。

Prolog

Prolog是一款配备有独特的反复试验式的GPS系统的车。它能边跑边寻找你的目的地,如果在路的尽头没有找到目的地,它会返回来尝试另外一条路,直到把你送到要去的地方。

Python

Python是一款绝佳的新手来开的车,开它你可以不要驾驶证。除非你想跑的特别快或想跑在未知的险恶地形上,你基本上不需要其它的车。

smalltalk

Smalltalk是 一部很小的车,最初是为一些想学开车的人设计的,但因为它设计的很出色,即使有经验的驾驶员也喜欢它。它跑的不 是很快,但你可以把它上面的任何一个部件换下来,改成你想要的。更奇怪的是,你事实上不是在驾驶它,你向它发送一个消息,告诉它去什么地方,它要么照做, 要么告诉你不理解你在说什么。

Ruby

Ruby车 诞生于Perl车、Python车和Smalltalk车在一个三岔路口相撞的事故中。一个日本机械师发现了相撞后的碎 片,把它们拼装成了一部车,很多司机认为这一个比之前的三个的总和都好。而另外一些人却抱怨说,Ruby车里的很多控制部件都是功能重复的,而且这些看似 功能相同的部件在某些特殊环境下又会稍微有些不同,这使得本该很好用的车变得很难驾驶。传说重新设计的一版正在开发中。

Visual Basic

Visual Basic,这种车不是你开它,而是它开你。

posted @ 2013-02-06 13:52 小马歌 阅读(244) | 评论 (0)编辑 收藏
 

js进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments。

一、arguments可以用arguments[index]这样的语法取值,拥有长度属性length。arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,例如:

  <script>
  function func(a,b){
  alert(a);
  alert(b);
  for(var i=0;i<arguments.length;i++){
      alert(arguments[i]);
  }
  }
 func(1,2,3,4);
  </script>

代码运行时会依次显示:1,2,1,2,3,4。函数定义了两个参数,但是在调用的时候传递了4个参数。

 

二、arguments的callee属性

它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性。例如:用递归来计算1到n的自然数之和:

<script>
   var sum=function(n){
    if(1==n) {
       return 1;
    } else {
       return n + arguments.callee(n-1);
     }
  }
  alert(sum(100));
</script>



在javascript函数体内,标识符arguments具有特殊含义。它是调用对象的一个特殊属性,用来引用Arguments对象。 Arugments对象就像数组,注意这里只是像并不是哈。

javascript函数体内,arguments像数组(并不是真的数组,是一个Arguments对象, 再次强调)一样,有length属性,可以代表传给函数的参数的个数。

引用一个形式参数可以用参数名,也可以用arguments[]数组形式,其中arguments[0]表示第一个参数。

所以,javascript中Arguments对象是函数的实际参数,下面,我们一起来进入这神奇的国度,一窥究竟。

arguments.length属性:

js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined

所以我们可以借助arguments的length属性来检测调用函数时是否使用了正确数目的实际参数,因为javascript是不会为你做这些 事的

function f(x,y,z)
{
   //首先检查传递的参数数量是否正确
   if(arguments.length!=3)
   {
       thrownew Error("function f called with "+ arguments.length+"arguments ,but it not 3 arguments.");
   }
   //下面运行真正的函数
}

arguments还为我们提供了这样一种可能,就是为一个函数传任意数目的实际参数:

比如说,我想判断你传给我的一些数字的大小,取出最大的那个,对,没错,你传多少参数都行,但是前提是你要传数字,因为我在函数内部懒得判断了。 呵。

function max()
{
   //根据我上一篇日志,这已经是JavaScript内最小的数字了
   var m = Number.NEGATIVE_INFINITY;
   for(var i =0; i < arguments.length; i++)
   {
       //只要有任何一个参数比m大,那么m就变成了这个参数的值
       if(arguments[i]> m)
            m = arguments[i];
   }
   return m;
}

怎么样?这个方法很巧妙吧?呵呵。

说明一下arguments与真正传的形式参数是一致的:

比如,你给函数传了一个叫param的参数,并且只有这一个参数,那么param与arguments[0]都是对这个参数值的引用,

改变其中一个值,即改变了二者所有的值

function change(param)
{
   //比如我传的param为simaopig,那么alert就是simaopig,
   //如果啥也没传就会alert undefined
   alert(param);
   //用arguments[0]改变了这个参数的值
    arguments[0]='xiaoxiaozi';
   //没错,这个值变成了xiaoxiaozi
   alert(param);
}

arguments的callee属性:

arguments的callee属性是用来引用当前正在执行的函数,这对未命名的函数调用自身非常有好处。

现在用arguments的这个callee同样可以简单的实现

//用函数直接量,采用arguments.callee属性实现递归函数
var result =function(x){
   if(x<=1)return1;
   return x*arguments.callee(x-1);
};

在最后提醒大家一点,既然这个arguments这么厉害,那么我们就不要为变量命名为arguments 了,事实上arguments是javascript的保留字之一。嗯。

posted @ 2013-02-01 14:45 小马歌 阅读(370) | 评论 (0)编辑 收藏
 
Jsunit 就是 Junit 的javascript 版本,下载并解压Jsunit zip,大部分的核心文件都在 jsunit/app 目录下,
两个最基本的文件:
. jsUnitCore.js -- 每个测试文件都要引用它
. testRunner.html -- 用来运行具体的jsunit 测试

(1) 起步例子:
在Jsunit解压后的同级目录下建立两个文件,目录结构:
|-- jsunit
|-- simple.js
|-- simple_test.html

写完后运行 jsunit/testRunner.html,在页面中选择simple_test.html, 点击run,可以看到测试结果信息。

// simple.js 被测试的javascript文件
function addTwoNumbers(value1, value2){
    return parseInt(value1) + parseInt(value2);
}

// simple_test.html 测试文件
<!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" 
src="jsunit/app/jsUnitCore.js"></script>
<script language="JavaScript" 
src="simple.js"></script>
<script language="JavaScript">
function testValidArgs()
{
    assertEquals("2 + 2 is 4", 
    4, addTwoNumbers(2, 2));
}
function testWithNegativeNumbers()
{
    assertEquals("-2 + -2 is -4", 
    -4, addTwoNumbers(-2, -2));
}
function exposeTestFunctionNames()
{
    var tests = new Array(2);
    tests[0] = "testValidArgs";
    tests[1] = "testWithNegativeNumbers";
    return tests;
}
</script>
</HEAD>

<BODY>
test page for addTwoNumbers(value1, value2);
</BODY>
</HTML>

通常以"test"开头的测试函数会被自动发现,但如果没有发现,就需要我们用exposeTestFunctionNames 函数来显示指定测试函数。

(2) setUpPage()

jsunit 包含了一次性启动方法,setUpPage() 只对每个测试页调用一次,即在所有测试函数调用之前调用,适于做预处理,但要注意在setUpPage()最后一行要把 setUpPageStatus 变量设置为 “complete”, 如:

var arg1;
var arg2;

function setUpPage(){
    arg1 = 2;
    arg2 = 2;
    setUpPageStatus = "complete";
}

(3) 测试集

测试集把不同的测试页分组组织,其中包含测试页或其他测试集,他们会按照顺序执行。
注意点:
. 测试集中不能包含任何测试函数
. 必须包含一个返回 jsUnitTestSuite 对象的 suite 函数
. 有两个方法添加测试页:addTestPage(testPage) addTestSuite(testSuite), 在添加测试页时要注意路径,应是相对于testRunner.html 的

例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" 
src="jsunit/app/jsUnitCore.js"></script>
<script language="JavaScript" 
src="simple.js"></script>
<script language="JavaScript">
function sampleSuite()
{
var sampleSuite = new top.jsUnitTestSuite();
sampleSuite.addTestPage("../simple_test.html");
return sampleSuite;
}
function suite()
{
var testSuite = new top.jsUnitTestSuite();
testSuite.addTestSuite(sampleSuite());
testSuite.addTestPage("../simple_test.html");
return testSuite;
}
</script>
</HEAD>

<BODY>
</BODY>
</HTML>

(4) 日志和跟踪

运行testRunner.html时会发现他有 Trace level 项,用于现实我们在测试方法中的日志信息,包含3个函数:
warn(message, [value])
inform(message, [value])
debug(message, [value])

原文出处:http://www.zhuoda.org/irini/83098.html
JsUnit下载地址:http://sourceforge.net/projects/jsunit/
posted @ 2013-02-01 11:24 小马歌 阅读(690) | 评论 (0)编辑 收藏
 
     摘要: Google JS Test是一个运行于V8 JavaScript引擎下的Javascript单元测试框架,其在Google内部负责对Chrome的快速JS执行速度进行测试,现在Google以开源工程开放大家使用。Google JS Test主要特性:超快的启动速度和执行时间,不需要在浏览器里运行清爽而具有可读性的输出内容也有一个可选的基于浏览器的测试器,可在JS修改的时候刷新其样式和语义跟Goo...  阅读全文
posted @ 2013-02-01 11:24 小马歌 阅读(350) | 评论 (0)编辑 收藏
仅列出标题
共95页: First 上一页 29 30 31 32 33 34 35 36 37 下一页 Last