毋庸置疑的,测试很难——即便是一个非常成熟的,经验老道的团队,也会时不时的遇到测试上的瓶颈。
这周末我打算写一篇关于测试的文章——主要概括 rails 以及 rspec 环境下的一些测试用法和技巧,共同进步。
大家有没有什么具体想要知道的东西?
=== 更新分割线 ===
终于写完了,请翻墙批阅:http://fredwu.me/post/59395419899/writing-sensible-tests-for-happiness :)
测试可以讲的东西太多,所以没能覆盖到所有的要求,请大家见谅~
暂时想到这些... 感谢楼主
是不是所有的项目都有必要写测试? 小道消息(未经确认):github 的项目基本不写测试
PS: 我们团队的 https://github.com/happypeter/onestep/ 项目现在代码也不少了,但是我却始终觉得写测试是个很得不偿失的努力。希望有高手能证明我是愚蠢的。
#12 楼 @nightire https://github.com/github/ 确实可以说明很多问题,多谢!
不过通过听 How Github use Github to Build Github 后,他们那边确实有 "TDD is too heavy, we love(at least don't mind) Twitter Driven Development" 的倾向。
#11 楼 @happypeter 这个小道消息还算靠谱吧..
整个 Slides 还是很好的,充满了各种重构的例子,使用 jasmine 写的测试。
不过真正有趣的部分出现在 Q&A 阶段:
某人站起来问 @bkeepers 请问 Github 是如何测试(人家没问如何 TDD)的呢?
然后 @bkeepers 说一线的代码不是我写的,然后叫了现场的一个 Github 同事回答这个问题。然后他的同事非常尴尬的站起来很不好意思的说:”大哥,咱 Github 不写测试的“……全场哄笑。
然后 @bkeepers 笑着说:“看我回去教这帮坏小子如何写测试去……”
#21 楼 @nightire 明白。。。我只是顺便八卦一下:)
就会上逮到了 Jeremy 本人,我记得趁着酒劲我问了几个问题:
您这代码都怎么写出来的?您有没有 TDD 呀?Jeremy 说我一般不写测试,不过为了保证质量,他会补充一些测试。他说我就是 write codes which make sense ……好的,Make sense 是对直觉型程序员常说的。彪悍是不需要解释的。 您平常也看别人的开源项目获取灵感么?您如何平衡写自己的东西和看别人的东西?Jeremy 说,啥?我写代码那是为了糊口,看别人的代码那不挣钱呀。所以我一般不怎么看别人的东西,我就写我自己的东西,我觉得 make sense 的东西,当然要写的 make sense ……
PS. Jeremy 是 coffeescript、underscore.js 还有 backbone.js 的作者。
#14 楼 @happypeter Writings.io 的 View 不写 Ruby 代码测试,主要测 Controller 和 Model。编辑器功能单独用 qunit 测试。最近想用前端 MVC 来重构交互部分,到时再用框架推荐的方法写前端测试。
@fredwu 我感到下面这两种情况比较难测试,想知道怎么做比较好:
另外一个是覆盖率问题,例如我在测试中加载了 simplecov, 然后通过命令行调用去测一个命令行工具。但那个命令行工具的实现代码没显示到测试的覆盖范围中,比较难知道漏测了哪个选择支。
#29 楼 @luikore web API 的测试 —— Mocking Web Requests
https://www.ruby-toolbox.com/categories/mocking_web_requests
比如这样 https://github.com/chloerei/alipay/blob/master/test/alipay/notify_test.rb
這裡有個項目演示了調用外部 API 的測試,使用的是 RSpec 以及 webmock,可以看看這個視頻:
Google I/O 101: YouTube and Ruby on Rails for Education
用 Ruby on Rails 演示 Google OAuth + YouTube API 的示例項目。
我主要想知道,日益增长的代码中如何保证快速的 test,不要类似 spork 的工具,不借助 preload 的工具。其次是如何的 mock。 rspec 这种就别讲了,要讲直接上 minitest
我觉得对测试有任何疑问的人先去读一下《Growing Object-Oriented Software, Guided by Tests》,能解很多实际的问题。
另外测试一般分 2 种风格,London School 和 Detroit School (Chicago School)。前者是使用 mock,后者是验证状态,上面的书是 London School 的开山之作,经典必读。
项目需求经常改变,测试代码也经常跟着改,现在是花在测试的时间还更多。体会不到测试的好处导致不能坚持写测试,这种情况该如何办呢?且如何维护好测试代码呢?thanks!
终于写完了,请翻墙批阅:http://fredwu.me/post/59395419899/writing-sensible-tests-for-happiness :)
测试可以讲的东西太多,所以没能覆盖到所有的要求,请大家见谅~