(七)用 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/ 只保存修正后的检查。