原本写程序一直懒得写测试,最近看了 rails cast 里面的测试的视屏,又被各种书中灌输测试思想,决定把前几个自己写的小项目都写上测试。结果自己一动手就蒙了,网上源码测试风格千人千样,每个人用的工具还各不相同,想自己就从 rspec 写起结果发现 简单的肯定会过的测试我会写,稍微复杂点的逻辑和 controller 层的测试压根就写不出来。不知道各位大大是怎么写测试的呢,刚上手应该如何快速有效地写出靠谱有用的测试呢?
从学习开始 https://github.com/saberma/shopqi https://github.com/fredwu/angel_nest https://github.com/railsbp/rails_best_practices
https://github.com/chloerei/code_campo
我写 Test::Unit,我觉得 Test::Unit 语法平实,更容易理解。楼主可以参考 code_campo 的 git log。
测试其实就一个逻辑:进行了什么操作,发生了什么效果。简单的测试很多时候很有效,不要把逻辑的复杂和测试的复杂绑定起来,写测试的时候把自己作为第 3 者观察就清晰很多了。
#2 楼 @Rei 能解释一下 Unit 测试和 Rspec 测试什么区别么。 #1 楼 @ywencn 的代码我大概看了一些,感觉不同的人用的工具和测试风格完全不一样,不知道怎么模仿比较好。
#3 楼 @tassandar
1 语法不同
Test::Unit 用 asset_* 断言风格 Rspec 用 should * 风格
2 Rspec 的辅助方法多一些,比如 should include
3 Rspec 可以嵌套上下文,上下文复杂的时候比较有帮助
4 Test::Unit 是 Rails 自带的,没有升级阻碍。rspec_rails 看文档说一些 should 方法其实是对 Test::Unit 的包装。
然后我感觉没别的了,做的是一样的事。
#3 楼 @tassandar 确实啊,我觉得 shopqi 的是写得比较中规中矩的,刚开始可以学习。
我写 rspec 时,先把一个个 it block 的文字描述写好,block 中间 pending,等要测的方法或流程写了那么个七八条 it 描述了,再开始填 it blocks。带着点挑刺的心态,好像你在 hack github 那种感觉就对了。