python单元测试调试的核心是快速定位问题,关键在于断言信息明确、测试可复现、执行可观察;用assert a == b代替asserttrue(a == b),失败时显示具体值和类型,浮点数用assert abs(a – b)
Python 单元测试调试的核心是让测试失败时能快速定位问题,而不是反复猜错在哪。关键在于:让断言失败信息更明确、让测试可复现、让执行过程可观察。
用 assert 语句代替 assertTrue/assertFalse
默认的
assertTrue(a == b)失败时只报 “False is not True”,看不出 a 和 b 到底是什么。改用直接比较:
assert a == b, f"a={a!r}, b={b!r}"—— 失败时立刻看到值和类型- 对浮点数用
assert abs(a - b) ,避免精度误差误报- 对字典或嵌套结构,用
self.assertEqual(a, b)(unittest)或assert a == b(pytest),它们自带结构化差异输出在测试中加 print 或 Logging 输出中间状态
测试运行快,但有时需要确认某段逻辑是否执行、变量是否如预期变化:
- 在关键位置插入
print(f"debug: x={x}, status={status}"),运行时加-s参数(pytest)或-v(unittest)保留输出- 用
logging.debug("step X done")配合logging.basicConfig(level=logging.DEBUG),比 print 更易开关- 注意:不要在 CI 环境中留大量 print,调试完及时删或注释
用 pdb 或 ide 断点单步调试测试
当问题难以靠日志定位时,进入代码内部逐行看:
立即学习“Python免费学习笔记(深入)”;
- 在测试函数中插入
import pdb; pdb.set_trace(),运行后会在该行暂停,支持n(下一行)、p var(打印变量)、c(继续)等命令- pycharm / VS Code 中直接在测试函数打断点,右键 “Debug ‘test_xxx’”,自动进入调试模式,支持变量监视、调用栈查看
- pytest 可加
--pdb参数:测试失败时自动进入 pdb;加--trace则在测试开始前就暂停隔离依赖,避免环境干扰
测试失败不一定是代码错,可能是外部状态(文件、数据库、网络、时间)影响:
- 用
unittest.mock.patch替换耗时/不稳定依赖,比如模拟 API 返回:@patch('requests.get')- 用临时目录做文件操作:
with tempfile.TemporaryDirectory() as tmp:,避免残留或权限问题- 固定随机种子:
random.seed(42)或numpy.random.seed(42),让随机行为可重现
