那些与好习惯有关的gem
以下的文章中我要介绍ZenTest, redgreen, reek, flog, flay, heckle, rspec, rr, flexmock, mocha, rcov。如果你都知道,就没必要看了,这事给那些还不知道的新手写得入门介绍。
一般的来讲,想写好ruby程序,就要充分利用前人的智慧,这里不光要借鉴前人的代码,前人编写的库,还要借鉴所谓的“最佳实践”。其中有很多实践是关于如何养成好习惯的,这其中包括如何开发,如何测试,如何发现坏味道并重构。
先说说开发,ruby的社区讲究TDD,所以说搭建一个本地的红绿灯系统就很有实际意义了。ZenTest提供的就是这样的功能。有了它,大家就可以轻松的在测试与编码之间忙活,而不用操心恼人的运行测试之类的体力活。它会智能的判定哪些文件被修改了,需要运行那些测试。比如我使用ubuntu,所以我选用了ZenTest+redgreen+libnotify的组合,一旦有什么风吹草动,屏幕上就会有个提示,告诉我有哪些测试没有通过。再说说,ZenTest可以搭配标准的TestUnit,也可以搭配Rspec。
那么什么是Rspec呢?话说啊,ruby在测试领域的实践非常繁荣,简直就是百家争鸣,百花齐放的大好局面。如果你已经觉得厌倦了TestUnit,或者尝试着从所谓的行为(Behavior)出发,那么就要尝试一下Rspec了。说哦白了他也是一套测试框架,只不过有人喜欢说法语,有的人喜欢说英语罢了。喜不喜欢完全看个人口味。不过我是很喜欢的。虽然Rspec内置有Test Double的小宇宙,但是这里还是推荐大家使用别的Test Double框架。这里简单解释一下Test Double,要是还有什么不明白大家自己google。我们为了测试需要将被测试部分与其他系统解耦,这样才能准确定位问题所在。要不然出了问题,还是不知道是被测试的目标有问题,还是系统的其他部分有问题。这就需要,将其他系统替换掉,常见的手法就是stub和mock,这些手法的通称Test Double,有人译作测试替身。rr, flexmock, mocha就是三个非常不错的Test Double框架。哈哈,在ruby的世界里很难看到有三个一样功能的主流实现吧,这恰恰说明了这个领域有多么繁荣。rr语法简洁,支持替身注入,也就是部分替换。flexmock由社区大牛Jim Weirich操刀,这个家伙就是rake,和gem的作者。mocha有rails老大DHH鼎力支持。选哪个就看你自己了。当然,不选择使用rspec默认的也是一种选择。
好了程序写出来了,该重构了。从哪里开始呢?使用reek检查一下吧。这是一个很简单的小工具,用于检查那些常见的代码坏味道。当然了它并不是很聪明,不过就像是一个基础要求一样,自少能告诉你可以从那里开始kick off。flog用来计算一段代码的(简单的算数)复杂度。flay用来看看代码的结构是不是相似。heckle以破坏程序的方式来检查测试用例的覆盖程度。rcov也是用来检查覆盖程度的工具。
好习惯 |
一般的来讲,想写好ruby程序,就要充分利用前人的智慧,这里不光要借鉴前人的代码,前人编写的库,还要借鉴所谓的“最佳实践”。其中有很多实践是关于如何养成好习惯的,这其中包括如何开发,如何测试,如何发现坏味道并重构。
先说说开发,ruby的社区讲究TDD,所以说搭建一个本地的红绿灯系统就很有实际意义了。ZenTest提供的就是这样的功能。有了它,大家就可以轻松的在测试与编码之间忙活,而不用操心恼人的运行测试之类的体力活。它会智能的判定哪些文件被修改了,需要运行那些测试。比如我使用ubuntu,所以我选用了ZenTest+redgreen+libnotify的组合,一旦有什么风吹草动,屏幕上就会有个提示,告诉我有哪些测试没有通过。再说说,ZenTest可以搭配标准的TestUnit,也可以搭配Rspec。
那么什么是Rspec呢?话说啊,ruby在测试领域的实践非常繁荣,简直就是百家争鸣,百花齐放的大好局面。如果你已经觉得厌倦了TestUnit,或者尝试着从所谓的行为(Behavior)出发,那么就要尝试一下Rspec了。说哦白了他也是一套测试框架,只不过有人喜欢说法语,有的人喜欢说英语罢了。喜不喜欢完全看个人口味。不过我是很喜欢的。虽然Rspec内置有Test Double的小宇宙,但是这里还是推荐大家使用别的Test Double框架。这里简单解释一下Test Double,要是还有什么不明白大家自己google。我们为了测试需要将被测试部分与其他系统解耦,这样才能准确定位问题所在。要不然出了问题,还是不知道是被测试的目标有问题,还是系统的其他部分有问题。这就需要,将其他系统替换掉,常见的手法就是stub和mock,这些手法的通称Test Double,有人译作测试替身。rr, flexmock, mocha就是三个非常不错的Test Double框架。哈哈,在ruby的世界里很难看到有三个一样功能的主流实现吧,这恰恰说明了这个领域有多么繁荣。rr语法简洁,支持替身注入,也就是部分替换。flexmock由社区大牛Jim Weirich操刀,这个家伙就是rake,和gem的作者。mocha有rails老大DHH鼎力支持。选哪个就看你自己了。当然,不选择使用rspec默认的也是一种选择。
好了程序写出来了,该重构了。从哪里开始呢?使用reek检查一下吧。这是一个很简单的小工具,用于检查那些常见的代码坏味道。当然了它并不是很聪明,不过就像是一个基础要求一样,自少能告诉你可以从那里开始kick off。flog用来计算一段代码的(简单的算数)复杂度。flay用来看看代码的结构是不是相似。heckle以破坏程序的方式来检查测试用例的覆盖程度。rcov也是用来检查覆盖程度的工具。
热门话题 · · · · · · ( 去话题广场 )
- 少年时代的科普读物 新话题
- 我在网络上感受到的陌生人善意 1069次浏览
- 维系精神生活的北京角落 1147次浏览
- 现代人的“卡夫卡时刻” 5759次浏览
- 解锁我的夏日旅行足迹地图 新话题
- 你最爱的粽子口味 新话题