
第 15章
测试
编写单元测试主要有两个目的。实现新功能时,单元测试能够确保新添加的代码按预期方
式运行。当然,这个过程也可手动完成,不过自动化测试显然能节省时间和精力,因为自
动化测试能轻松地重复运行。
另外,一个更重要的目的是,每次修改应用后,运行单元测试能保证现有代码的功能没有
回归
,即新改动没有影响原有代码的正常运行。
从一开始我们就为
Flasky
应用编写了单元测试,检查数据库模型类有没有实现特定的功
能。模型类很容易在运行中的应用上下文之外进行测试,因此不用花费太多精力,为数据
库模型中实现的全部功能编写单元测试至少能有效保证应用的这一部分在不断完善的过程
中仍能按预期运行。
本章将讨论如何改进和增强单元测试,并覆盖应用的其他部分。
15.1
获取代码覆盖度报告
编写测试组件很重要,但知道测试的状况同样重要。代码覆盖度工具用于统计单元测试检
查了应用的多少功能,并提供一份详细的报告,说明应用的哪些代码没有测试到。这个信
息非常重要,因为它能指引你为最需要测试的部分编写新测试。
Python
提供了一个优秀的代码覆盖度工具,名为
coverage
。这个工具使用
pip
安装:
(venv) $
pip install coverage
这个工具本身是一个命令行脚本,可在任何一个
Python
应用中检查代码覆盖度。除此之
外,它还提供了更方便的脚本访问功能,使用编程方式启动覆盖检查引擎。为了能更好地
把覆盖检测集成到第
7
章添加的 flask test 命令中,我们可以添加一个 --coverage 选项,
169