全栈工程师成长记

编程重新定义人生

第七周学到的最棒概念——TEST

第七周学到的最棒概念——TEST

经过四个星期的团队协作,随着新功能的不断加入,每个小组的代码量都增长到了一定程度,因此在这周 xdite 老师适时给大家引入了 测试 (Test) 的基本概念。在这之前,我对测试的理解是很模糊的,我只知道如果新增了一个功能,就要去走一下流程,看看会不会出现报错、有没有执行了正确的操作之类的,但我不知道竟然还有一个可以独立出来的“测试”概念——之前我会搞不懂 config/environments 里 development.rb 和 test.rb 这两个环境配置文件有什么区别。可以说了解到测试这个概念在很大程度上又是完成了一块拼图。本文主要根据前几天的日记重新梳理一下对测试的基本理解。

  1. Rails 环境分为 Development(开发)、Test(测试)、Production(生产)共三种环境。
  2. 测试(Test)是指写[测试代码]去自动测试[整体代码]是否正确。
  3. 测试通常有3种:
    a. 单元测试(Unit test)。测试 model 或 service 里的某个 method 是否正确;
    b. 功能测试(Functional Test)。测试 action 是否能输出预期的 view 或者 redirect_to;
    c. 整合测试(Integration Test )。测试一个真实情景的操作流程,比如从添加购物车到生成订单再到付款。

  4. 通常用“绿灯”、“红灯”表示测试是否通过。

  5. 当代码量比较少的时候,可以手动测试修改的代码是否正常;而当程序开始复杂后,有必要使用自动测试(Test)的减少重复劳动且保证程序可以随时正常运行。

  6. TDD(Test-Driven Development)方法是先写测试程序预期结果,然后再写代码直到符合测试程序的要求。

  7. 写1行代码通常需要再写3行代码来测试。

  8. 初阶程序员不太建议写测试的原因是,你不知道它报的错是你的程序错了还是你写的测试程序本身就错了。

  9. 不建议新手写测试的另一个原因就是写测试的时间比写 code 的时间还要耗费更多。

  10. “测试工程师”是专业分工的体现。

  11. RSpec是一个Ruby的测试工具,在 Rails 中常用的是叫做 rspec-rails 的 gem(虽然Rials 也有内建的 Test 功能,但……)。

  12. Github 可以跟测试自动整合,绿灯后还可以自动 deploy 到 heroku 。

  13. 测试的目的是验证代码是否正确而不是验证商业机会是否正确,商业的机会是不允许错过的,因此测试虽然重要,也要注重两者的平衡。