Python 单元测试入门:doctest 与 unittest 实战解析

林见深
林见深
发布时间:2026-10-12 | 1人浏览过
原创

本文详细介绍 Python 中两种主要的测试实现方法:doctest 和 unittest。doctest 通过文档字符串嵌入测试,适合简单函数验证;unittest 基于 TestCase 和 TestSuite,支持更复杂的测试流程,包括 setUp/teardown 预处理及断言方法。通过具体代码示例,展示如何构造测试集并执行测试,帮助开发者快速掌握 Python 单元测试的核心技巧。

 1) doctest
doctest 的使用方式类似于在命令行中直接尝试代码,其用法非常直观。
复制代码 代码如下:

def f(n):
"""
>>> f(1)
1
>>> f(2)
2
"""
print(n)

if __name__ == '__main__':
import doctest
doctest.testmod()

这种方式足够简单。此外,还可以使用 doctest.testfile(filename) 函数,将命令行测试用例写入文件中进行批量测试。

2) unittest
unittest 是一个历史悠久的测试框架,最早可追溯至上世纪七八十年代,C++ 和 Java 中也有类似的实现。在 Python 中,其实现方式相对简洁。
在 Python 中,unittest 主要通过 TestCase 和 TestSuite 两个核心类来实现。下面通过具体示例来演示其用法。
复制代码 代码如下:

from widget import Widget
import unittest
# 执行测试的类
class WidgetTestCase(unittest.TestCase):
def setUp(self):
self.widget = Widget()
def tearDown(self):
self.widget.dispose()
self.widget = None
def testSize(self):
self.assertEqual(self.widget.getSize(), (40, 40))
def testResize(self):
self.widget.resize(100, 100)
self.assertEqual(self.widget.getSize(), (100, 100))
# 测试
if __name__ == "__main__":
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase("testSize"))
suite.addTest(WidgetTestCase("testResize"))

# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)

简单来说,测试流程分为三步:1. 构造 TestCase(测试用例),其中 setUp 和 tearDown 方法分别负责预处理和清理工作;2. 构造测试集,将用例添加到其中;3. 执行测试。需要特别说明的是,Python 中提供了多种断言测试方法,主要包括以下几种:
TestCase.assert_(expr[, msg])
TestCase.failUnless(expr[, msg])
TestCase.assertTrue(expr[, msg])
TestCase.assertEqual(first, second[, msg])
TestCase.failUnlessEqual(first, second[, msg])
TestCase.assertNotEqual(first, second[, msg])
TestCase.failIfEqual(first, second[, msg])
TestCase.assertAlmostEqual(first, second[, places[, msg]])
TestCase.failUnlessAlmostEqual(first, second[, places[, msg]])
TestCase.assertNotAlmostEqual(first, second[, places[, msg]])
TestCase.failIfAlmostEqual(first, second[, places[, msg]])
TestCase.assertRaises(exception, callable, ...)
TestCase.failUnlessRaises(exception, callable, ...)
TestCase.failIf(expr[, msg])
TestCase.assertFalse(expr[, msg])
TestCase.fail([msg])
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表