Python单元测试核心是验证单个函数或方法在给定输入下是否产生预期输出,重点检验逻辑正确性、边界健壮性与异常可控性,需覆盖正常值、边界值及异常场景,并隔离外部依赖。

Python 单元测试的核心是验证**单个函数或方法在给定输入下是否产生预期输出**,重点不是测“代码有没有运行”,而是测“逻辑是否正确、边界是否健壮、异常是否可控”。
测明确的输入输出关系
每个被测函数应该有清晰的职责。比如一个计算折扣价的函数:
def apply_discount(price: float, discount_rate: float) -> float:
就该覆盖正常折扣(如 100 元打 9 折 → 90)、零折扣(→ 100)、满减触发边界(如满 200 减 30)等场景。用 assert 检查返回值是否精确等于期望结果,而不是只看是否不报错。
测边界和异常情况
容易出错的地方往往不在中间值,而在边缘:
- 输入为 None、空字符串、负数、超大数
- 除零、索引越界、类型不匹配等可能抛出的异常
- 使用 self.assertRaises(ValueError) 或 pytest.raises() 显式断言异常是否按预期抛出
测纯逻辑,不测外部依赖
单元测试要快、稳定、可重复。数据库、网络请求、文件读写这些都该被mock掉。例如函数内部调用了 requests.get,测试时就用 patch 替换它,返回预设的响应对象,专注验证你自己的解析逻辑是否正确。
不测的内容要心里有数
以下通常不属于单元测试范围:
- 多个函数串联的流程(那是集成测试)
- UI 行为或用户交互(属于端到端或 UI 测试)
- 纯配置、文档字符串、类型注解本身(它们靠静态检查工具如 mypy、pydocstyle)
- 未导出的私有方法(_helper、__internal),除非它逻辑复杂且影响核心行为










