Python编程:从入门到实践
章节

第 11 章 测试代码

从能跑到能证实,程序质量开始有了第二层保障

第十一章把 unittest 和 pytest 的基本测试思维交给读者,让代码从‘看起来对’迈向‘被验证过’。

章节主张

测试的真正价值不只是找 bug,而是给重构、扩展和协作提供信心结构。

中文释读

大多数入门书不会这么早认真讲测试,而这本书把它放在基础部分的末尾,其实很聪明。因为到这里你已经接触了函数、类、文件、异常,如果没有测试,后面的项目复杂度一上来,你很快会失去控制。作者在这里只做温和切入,但已经足够让初学者知道:代码不是写完就结束,验证是开发的一部分。

本章知识路线

  1. 测试给程序加的不是仪式,而是信心结构
  2. 真正持续进步的代码,都要靠可验证重构

关键论点

  • 测试会显著降低修改代码时的心理成本。
  • pytest 的输出结构能帮助开发者快速定位质量状态。
  • 一旦程序规模增长,手工点点点验证很快不够用。

行动清单

  • 至少给关键函数和类写最小测试。
  • 分清功能代码和验证代码的边界。
  • 把“改动后跑测试”变成习惯动作。

源章节深读

第 11 章 测试代码 在编写函数或类时,还可为其编写测试。通过测试,可确定代码⾯对 各种输⼊都能够按要求⼯作。测试让你坚信,⽆论有多少⼈使⽤你的 程序,它都将正确地⼯作。在程序中添加新代码时,也可对其进⾏测 试,确认它们不会破坏程序既有的⾏为。程序员都会犯错,因此每个 程序员都必须经常测试⾃⼰的代码,先于⽤户发现问题。 在本章中,你将学习如何使⽤ pytest 来测试代码。pytest 库是⼀组⼯ 具,不仅能帮助你快速⽽轻松地编写测试,⽽且能持续⽀持随项⽬增⼤⽽ 变得复杂的测试。 Python 默认不包含 pytest,因此你将学习如何安装外 部库。知道如何安装外部库让你能够使⽤各种设计良好的代码。这些库还 极⼤地增加了你可开发的项⽬类型。 你将学习编写测试⽤例,核实⼀系列输⼊都将得到预期的输出。你将看到 测试通过了是什么样⼦的,测试未通过⼜是什么样⼦的,还将知道测试未 通过如何有助于改进代码。你将学习如何测试函数和类,以及该为项⽬编 写多少个测试。 11.1 使⽤ pip 安装 pytest 虽然 Python 通过标准库提供了⼤量的功能,但 Python 开发⼈员还是需要频 繁⽤到第三⽅包。

11.1 使用 pip 安装 pytest

11.1 使⽤ pip 安装 pytest 虽然 Python 通过标准库提供了⼤量的功能,但 Python 开发⼈员还是需要频 繁⽤到第三⽅包。第三⽅包( third-party package )指的是独⽴于 Python 核 ⼼的库。有些深受欢迎的第三⽅包最终会被纳⼊标准库,并从此随 Python ⼀起被安装。通常,能被纳⼊标准库的包在消除最初的 bug 后不会发⽣太 多变化,它们在被纳⼊后只能与 Python 语⾔同步演进。

这节解决什么:这一节主要解决《第 11 章 测试代码》里一个更具体的子问题:11.1 使用 pip 安装 pytest 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

11.2 测试函数

11.2 测试函数 要学习测试,必须有要测试的代码。

这节解决什么:这一节主要解决《第 11 章 测试代码》里一个更具体的子问题:11.2 测试函数 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

11.3 测试类

11.3 测试类 在本章的前半部分,你编写了针对单个函数的测试,下⾯来编写针对类的 测试。很多程序会⽤到类,因此证明类能够正确地⼯作⼗分必要。如果针 对类的测试通过了,你就能确信对类所做的改进没有意外地破坏其原有的 ⾏为。 11.3.1 各种断⾔ 到⽬前为⽌,我们只介绍了⼀种断⾔:声称⼀个字符串变量取预期的值。 在编写测试时,可做出任何可表⽰为条件语句的断⾔。如果该条件确实成 ⽴,你对程序⾏为的假设就得到了确认,可以确信其中没有错误。

这节解决什么:这一节主要解决《第 11 章 测试代码》里一个更具体的子问题:11.3 测试类 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

11.4 小结

11.4 ⼩结 在本章中,你学习了如何使⽤ pytest 模块中的⼯具来为函数和类编写测 试。不仅学习了如何编写测试函数,以核实函数和类的⾏为符合预期,⽽ 且学习了如何使⽤夹具来⾼效地创建可在测试⽂件中的多个测试函数中使 ⽤的资源。 测试是很多初学者并不熟悉的主题。作为初学者,你并⾮必须为⾃⼰尝试 的所有项⽬编写测试。但是,在参与⼯作量较⼤的项⽬时,应该对⾃⼰编 写的函数和类的重要⾏为进⾏测试。

这节解决什么:这一节主要解决《第 11 章 测试代码》里一个更具体的子问题:11.4 小结 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

辨析题

为什么初学者也值得尽早接触测试?

本章图版学习路径

测试给程序加的不是仪式,而是信心结构

真正持续进步的代码,都要靠可验证重构