Rails 单元测试都需要测试哪些?? 测试小白

tiseheaini · 2012年11月01日 · 最后由 torvaldsdb 回复于 2016年12月30日 · 4057 次阅读

单元测试都需要测试哪些?? 测试小白 单元测试就是对 model 的测试,但很少碰测试,小项目需要测试,不知道如何下手?? 现在知道的只有对 验证 进行测试。其他的就不知道的??求指教

单元测试就是对 model 的测试

嗯?谁说的啊?=.=

#1 楼 @fredwu 小白说的!!

#1 楼 @fredwu 那应该测试哪些??实在摸不到头脑!!

对验证的测试貌似是没有意义的。 单元测试的话,测测自己关键的逻辑函数吧。 功能测试感觉很有必要,最起码能保证自己请求通畅。

单元测试功能可以对模型验证机制进行检查并确保数据库已正常工作。

#6 楼 @yetone #5 楼 @davidqhr 很谢谢,能说的再清楚一些吗??

#7 楼 @tiseheaini 不好意思才看到.. 我觉得这个不太好三言两语。建议你看一些实例,比如 https://github.com/pragmaticly/railscasts-china/tree/master/spec

你这次去 Rubyconf 吗?我那时还会分享一些经验 :)

#8 楼 @poshboytl 哇哈哈,我能理解成你在拉粉丝么!!

#9 楼 @davidqhr 这也被你发现了? 那我岂不是应该请你吃饭咯? :D

其实我和楼主认识哈 :) 如果我没记错 上次 kevin 那个报名 email 抓取就是楼主做的...

#10 楼 @poshboytl Rubyconf 很想去,但是估计时间不允许了。做等看大神们的录像。

#10 楼 @poshboytl 很想参加,尽量去吧!争取有机会去上海,谢谢老师还记得我

单元测试就是在 class/method 这个层级进行测试。

往往单元测试都是白盒测试, 形象点说是 开盒测试, 相对于黑盒测试,意思就是在已知代码实现的情况下进行测试。

白盒测试的的原因,就是要达到尽可能高的测试覆盖率,包括 Code 覆盖,Condition 覆盖 还有 Path 覆盖 等。

Code 很好理解,就是尽量达到所有的 Code 都测试到。

Condition,就是如果你又一个 if.. else, 那么 if 跟 else 的情况都要测试到。这里有时候还包括边界值和极限值的测试。

Path, 就是当你的代码执行有多种路径的时候,最好要测试到个种路径。可以是组合的 if..else.或者是嵌套的 if..else,都会有不同的路径组合,包括 exception 的处理,最好都要测试到。

通常我在 Rails 单元测试的时候做这么几件事。 1.mock/stub, 就是除了当前测试的这个类或者方法是真的,其他的全都是替身,减轻了单元测试的复杂度。

  1. 尽量不访问任何外部资源包括数据库等,或者说这些也是用替身。 这样既减轻了依赖度,而且也提高了执行的效率。
  2. 需要的测试数据可以用 factory girl 之类的生成,避免静态的数据库数据。

#14 楼 @hisea 谢谢你回答问题,貌似懂点了。

#15 楼 @tiseheaini 不客气,哈哈

每个 Action 必须有一个功能测试 如果你想模拟用户的多个请求,可以用集成测试 如果你想测 Model 层的算法,集成测试和功能测试都无法满足你的时候,你可以用单元测试。

所有测试的比例 应该是 功能测试 60% 集成测试 30% 单元测试 10%

仅供参考,概不负责。)

#17 楼 @ery 最后一句,让我不敢相信你说的是真的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册