110、unittest 标准库:TestCase、TestSuite、TestRunner 的共存与迁移

110、unittest 标准库:TestCase、TestSuite、TestRunner 的共存与迁移
110、unittest 标准库:TestCase、TestSuite、TestRunner 的共存与迁移一个让我熬夜到凌晨三点的Bug上周五晚上,我接手了一个遗留的自动化测试项目。项目里混用了unittest.TestCase、手动构建的TestSuite,还有自定义的TestRunner。看起来一切正常,直到我执行了某个测试类——结果跑了整整40分钟,最后报了个诡异的“TestSuite对象不可迭代”错误。我盯着屏幕,咖啡杯里的咖啡已经凉透了。翻遍整个项目,发现有人把TestCase和TestSuite混装在同一个列表里,然后直接扔给了TestRunner。这种写法在Python 3.8之前还能勉强跑,但到了3.10+,unittest内部迭代逻辑改了,直接炸了。这个坑让我意识到:很多人对unittest这三个核心组件的“共存”和“迁移”理解得不够透彻。今天这篇笔记,我就从这次调试经历出发,把TestCase、TestSuite、TestRunner的关系彻底讲清楚。TestCase:测试的最小单元,但别把它当“函数”用TestCase是unittest的基石。每个测试用例继承自unittest.TestCase,里面定义test_开头的方法。但很多人犯的第一个错误是:把TestCase当成普通类,在里面写业务逻辑。