Python 单元测试调试方法

7次阅读

python单元测试调试的核心是快速定位问题,关键在于断言信息明确、测试可复现、执行可观察;用assert a == b代替asserttrue(a == b),失败时显示具体值和类型,浮点数用assert abs(a – b)

Python 单元测试调试方法

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 == bpytest),它们自带结构化差异输出

在测试中加 printLogging 输出中间状态

测试运行快,但有时需要确认某段逻辑是否执行、变量是否如预期变化:

  • 在关键位置插入 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),让随机行为可重现
text=ZqhQzanResources