从Python开始真正见识TDD--初始山羊

TDD这一词很早就听过,Test Driven Development,之前更多的认知是停留在概念上的,很少实践、盲目实践,而且认为这就是一套方法论而已。由于之前项目时间紧张,再加上个人编程习惯的传统,TDD多次的擦身而过,最后停留在可望而不可及的层面了。

image.png

最近开始深入了解Python知识,买了一本《Python Web开发测试驱动方法》的书,由Harry J.W. Percival著,起初知识想着了解一下Python的测试知识有什么不同,没想到有幸真正认识了“测试山羊”,读了前言和前三章后终于茅塞顿开,TDD不只是一个理念,更是一个非常可操作的方法,并且从心理学上讲也能极大减少开发压力,从而写出让人赏心悦目的代码。废话不多说了,首先说点准备工作。

一、准备工作

  • Python环境,>3.3
  • HTML基础知识
  • JavaScript基础知识
  • Firefox或其他浏览器,建议Firefox
  • Git,一定要有版本管理
  • Selenium,最新版本
  • Django

小Tips:除非你确切的知道要做什么,否则不要使用virtualenv。

你需要一个脾气不好、不可理喻的师傅来强制你进行TDD,我们的师傅就是“测试山羊”,一次只迈一步。

二、TDD步骤:

TDD不是天生就会的技能,需要像武术一样反复练习,一旦掌握熟练后,它的驱动真的很快很快。

  1. 编写测试。第一步始终一样
  2. 编写应用代码。只有测试失败了才能进行第二步
  3. Git提交。每次改动都要进行提交,并写提交消息
  4. 编写测试首先编写一个用户故事
  5. 精简注释。只要努力做到代码可读,使用有意义的变量名和函数名,保持代码结构清晰,就不需要通过注释说明代码做了什么,只是偶尔写点注释说明为什么这么做。否则就会形成注释谎言。
  6. 预期失败。对于意料之中的失败其实是好消息,只需等待失败的出现,并在出现有编写应用代码。

重来一遍,换个说法(原书):

  1. 先写功能测试,从用户角度描述应用的新功能
  2. 功能测试失败后,想办法写代码让它通过(或者说至少让当前失败的测试通过)。此时使用一个或多个单元测试定义希望代码实现的效果,保证为应用中的每一行代码(至少)编写一个单元测试。
  3. 单元测试失败后,编写最少量的应用代码,刚好让单元测试通过。有时要在第2步和第3步之间多次往复,直到我们觉得功能测试有一点进展为止。
  4. 再次运行功能测试,看能否通过,或者有没有进展。这一步可以促使我们编写一些新的单元测试和代码等。

三、相关知识点:

  • 功能测试脚本
    名称:functional_tests.py
    执行:$ python functional_tests.py
  • 创建Django项目
    $ django-admin.py startproject firstDemo
  • 启动Django项目
    $ python manage.py runserver
  • 创建Django应用
    $ python manage.py startapp lists
  • 运行Django单元测试
    $ python manage.py test
  • TDD同时使用功能测试和单元测试

功能测试:站在用户的角度从外部测试应用。高层驱动。
单元测试:站在程序员的角度从内部测试应用。低层驱动。

  • “单元测试/编写代码”循环
    (1)在终端里运行单元测试
    (2)在编辑器中改动最少量的代码
    (3)重复上两步

四、阅读报错报告

一定要花时间学习如何快速阅读错误报告,找出解决问题的线索。

  1. 首先查看错误本身。很多时候你只需查看这一处就能找出问题所在,不过有些时候原因就不那么明显。
  2. 接下来要确认哪个测试失败了。反问:是刚才写的预期失败的那个测试吗?
  3. 然后查看导致失败的测试代码。要从测试报告顶部往下看,找出错误发生在哪个测试文件中的哪个测试函数中的哪一行代码。
  4. 通常还有第四步,继续往下看,查找问题牵涉的应用代码。

五、用户故事参考

image.png

image.png

先到这里,后面章节阅读后、实践后再续。

你可能感兴趣的:(从Python开始真正见识TDD--初始山羊)