Python 现代开发学习笔记

(七)用 pytest 运行第一份失败记录

1. 测试函数表达可比较的结果

先进入配套的 test_start 目录,用第一章的项目环境安装 pytest。它是开发时运行的工具,不参与书籍库平时的计算:

# 使用已经选好的 Python 3.12 项目解释器安装并核对 pytest。
python -m pip install "pytest>=9.1,<10"
python -m pytest --version

下面把同一个错误判断与检查放在一起,专门观察测试失败的显示:

# 项目文件:test_start/test_goal_before.py
# 错误示例:测试期待恰好达标也计数,当前实现却返回 0。
def count_met(minutes, goal):
    return sum(value > goal for value in minutes)


def test_exact_goal():
    assert count_met([35], 35) == 1
# 显式运行这份错误示例;-q 精简输出,终端会显示一次失败。
python -m pytest -q test_goal_before.py

报告里有 assert 0 == 1,并标出 test_exact_goal 的断言行。pytest 收集 test_*.py 等测试文件,再调用其中以 test_ 开头的测试函数;函数正常完成即通过,断言或其他异常会使它失败。返回 False 并不表达失败,比较结果要写成 assert。pytest 第一份测试

2. 修正后重新运行同一份数据

# 项目文件:test_start/test_goal_after.py
# 保留同一输入,只修正比较关系,观察检查由失败转为通过。
def count_met(minutes, goal):
    return sum(value >= goal for value in minutes)


def test_exact_goal():
    assert count_met([35], 35) == 1
# 这次显式选择修正后的文件,结果包含 1 passed。
python -m pytest -q test_goal_after.py

先看到失败,说明这份输入确实能揭示刚才的问题;修正后通过,再运行其他检查,确认没有改变原本正确的行为。这就是留下失败用例的作用。两份教学文件分别运行,后面完整项目的 tests/ 只保存修正后的检查。

同一输入从失败、修正、重新通过到加入回归检查的过程

笔记正文与全部题解 · Ctrl / ⌘ K