Python unittest 使用教程
unittest
是 Python 内置的单元测试框架,用于为代码编写和运行测试。本文将介绍如何使用 unittest
,并通过一个示例展示其实际用法。
1. 什么是单元测试?
单元测试是针对代码中最小单元(通常是函数或方法)的测试,用来验证其行为是否符合预期。通过单元测试可以:
- 快速发现代码中的错误。
- 保证代码重构后功能正确。
- 提高代码的质量和可维护性。
2. unittest 的基本概念
unittest
框架基于以下几个核心概念:
-
测试用例(Test Case):
- 每个测试用例是一个类,继承自
unittest.TestCase
。 - 在测试用例中定义的每个以
test_
开头的方法,都会被识别为一个测试。
- 每个测试用例是一个类,继承自
-
断言(Assertions):
unittest
提供了一系列断言方法,用于验证代码行为是否符合预期。例如:assertEqual
、assertTrue
。
-
测试套件(Test Suite):
- 测试套件是一个测试集合,可以组合多个测试用例。
-
测试运行器(Test Runner):
- 运行测试并报告测试结果。
- 可以通过命令行运行,也可以在代码中使用。
3. unittest 基本使用步骤
-
导入模块:
import unittest
-
创建测试用例类:
- 继承
unittest.TestCase
。 - 定义测试方法,方法名需以
test_
开头。
- 继承
-
编写断言:
- 使用
self.assertEqual
、self.assertTrue
等方法验证输出是否符合预期。
- 使用
-
运行测试:
- 使用命令行运行:
python -m unittest test_module.py
- 或在脚本中添加:
if __name__ == "__main__":unittest.main()
- 使用命令行运行:
4. 常用断言方法
以下是 unittest
中常用的断言方法:
方法 | 说明 |
---|---|
assertEqual(a, b) | 验证 a == b |
assertNotEqual(a, b) | 验证 a != b |
assertTrue(x) | 验证 x 为真 |
assertFalse(x) | 验证 x 为假 |
assertIn(a, b) | 验证 a 在 b 中 |
assertNotIn(a, b) | 验证 a 不在 b 中 |
assertRaises(Exception) | 验证是否抛出指定异常 |
5. 示例代码
以下是一个简单的示例,用于测试一个基本的数学运算函数:
# math_operations.pydef add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:raise ValueError("Division by zero is not allowed")return a / b
对应的测试代码:
# test_math_operations.py
import unittest
from math_operations import add, subtract, multiply, divideclass TestMathOperations(unittest.TestCase):def test_add(self):self.assertEqual(add(3, 5), 8)self.assertEqual(add(-1, 1), 0)def test_subtract(self):self.assertEqual(subtract(10, 5), 5)self.assertEqual(subtract(0, 4), -4)def test_multiply(self):self.assertEqual(multiply(3, 7), 21)self.assertEqual(multiply(0, 5), 0)def test_divide(self):self.assertEqual(divide(10, 2), 5)with self.assertRaises(ValueError):divide(5, 0)if __name__ == "__main__":unittest.main()
6. 运行测试
- 保存
math_operations.py
和test_math_operations.py
文件。 - 在终端运行:
python -m unittest test_math_operations.py
- 查看测试结果:
- 如果所有测试通过,输出类似:
.... ---------------------------------------------------------------------- Ran 4 tests in 0.001sOK
- 如果测试失败,报告失败的测试及其原因。
- 如果所有测试通过,输出类似:
通过以上步骤,你可以快速上手使用 unittest
编写和运行单元测试,为代码的稳定性保驾护航!
更多技术文章请关注:Arthur