首页/开发/软件测试速查/Python unittest 基础
自动化测试66 条

Python unittest 基础

标准库 unittest 以 TestCase 类组织用例并提供断言方法族,python -m unittest discover 支持目录发现;pytest 能直接收集运行 unittest 用例,便于渐进迁移。

软件测试速查开发更新于 2026-10-13

单元测试基础是什么

单元测试针对代码中最小可测单元(函数、方法、类)验证行为是否符合预期,特点是运行快、隔离依赖、失败即定位到具体函数。工程上推崇先写断言再写实现、一次只验证一个行为的节奏。它是整个测试金字塔的基座:单元测试便宜且稳定,覆盖越高,上层集成与端到端测试才可以更聚焦。

基本信息

结构模式准备数据(Arrange)、执行动作(Act)、断言结果(Assert)
隔离手段替身对象:桩、伪造、模拟,隔离网络与数据库等外部依赖
命名习惯测试名描述场景与预期,如 超过限额时应拒绝提交
常用框架Python 的 pytest 与 unittest,Java 的 JUnit,JavaScript 的 Jest
覆盖视角语句与分支覆盖辅助判断盲区,不当作唯一目标
运行频率本地保存即跑、提交前必跑、流水线每次构建全量跑

pytest 示例

pytest 示例
def calc_discount(total, vip):
    if total >= 100:
        return 0.9 if vip else 0.95
    return 1.0

import pytest

def test_vip_over_100():
    assert calc_discount(120, True) == pytest.approx(0.9)  # 满额且会员

def test_non_vip_under_100():
    assert calc_discount(80, False) == 1.0  # 未满额不打折
# 一个用例验证一个行为,失败时能直接看出哪条规则被破坏

典型使用场景

  • 新功能开发:先写失败用例再补实现,锁定期望行为。
  • 缺陷修复:为每个修复补一条回归用例,防止复发。
  • 老代码重构:先补特征测试网,再动手改结构。
  • 核心算法:金额、税费、排序等逻辑用密集断言保护。
  • 流水线门禁:提交即跑全量单测,快速拦住低级错误。
测行为不测实现:断言公开行为而非内部调用细节,重构时才不会大面积碎测试。
外部依赖要隔离:单测里连数据库或网络会拖慢速度、制造偶发失败。
单元测试不能替代集成测试:模块间契约与真实环境的坑,只有集成层能暴露。
先易后难:给新写的纯函数补单测收益最高,老代码可从缺陷高发模块开始逐步加网。
别用单测给错误实现背书:断言写的是实际结果还是期望结果,评审时要盯住。

易错点

  • 测试依赖外部系统:偶发失败频出,团队开始不信任红色信号。
  • 断言太弱:只验证不抛异常或断言对象非空,缺陷穿行无阻。
  • 一个用例塞多场景:失败时不知道哪条行为断了,定位成本高。
  • 测试互相依赖执行顺序:并行运行或单独运行就失败,排查困难。
  • 把覆盖率玩成数字游戏:补无断言的空测试凑指标,保护力为零。

数据来源与参考

  • Python 官方文档:unittest(docs.python.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌