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

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

本文详细介绍 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。