在 Python 中,进行单元测试通常使用内置的 unittest
模块。以下是如何编写和运行单元测试的步骤:
1. 编写要测试的函数
首先,编写一个简单的函数,假设我们有一个用于计算两个数之和的函数:
def add(a, b):
return a + b
2. 创建测试用例
使用 unittest
模块创建测试用例。测试用例是一个类,继承自 unittest.TestCase
,并包含若干个以 test_
开头的方法。这些方法将测试你编写的函数。
import unittest
# 假设我们将要测试的函数放在 my_module.py 文件中
# from my_module import add
class TestAddFunction(unittest.TestCase):
def test_add_integers(self):
self.assertEqual(add(1, 2), 3)
self.assertEqual(add(-1, 1), 0)
self.assertEqual(add(-1, -1), -2)
def test_add_floats(self):
self.assertEqual(add(1.1, 2.2), 3.3)
self.assertEqual(add(-1.1, 1.1), 0.0)
self.assertEqual(add(-1.1, -1.1), -2.2)
def test_add_strings(self):
self.assertEqual(add('hello', ' world'), 'hello world')
if __name__ == '__main__':
unittest.main()
3. 运行测试
将上面的测试用例代码放在一个文件中,保存为 test_my_module.py
。然后在终端或命令行中运行该测试文件:
python test_my_module.py
示例输出
运行测试后,输出可能如下所示:
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
这表示三个测试都通过了。如果有测试未通过,unittest
会显示哪个测试失败以及失败的原因。
4. 使用测试框架
unittest
是 Python 标准库的一部分,可以满足大多数单元测试需求。以下是一些 unittest
的功能和方法:
-
self.assertEqual(a, b)
: 检查a == b
-
self.assertNotEqual(a, b)
: 检查a != b
-
self.assertTrue(x)
: 检查x
为真 -
self.assertFalse(x)
: 检查x
为假 -
self.assertIsNone(x)
: 检查x
为None
-
self.assertIsNotNone(x)
: 检查x
不为None
-
self.assertRaises(exc, fun, *args, **kwds)
: 检查fun
执行时抛出异常exc
更复杂的测试框架
除了 unittest
,还有一些更复杂的测试框架,如 pytest
。它更为灵活,提供了很多有用的功能和插件。以下是 pytest
的一个简单示例:
- 安装
pytest
:
pip install pytest
- 编写测试用例(与
unittest
相似,但不需要继承unittest.TestCase
):
# test_my_module.py
from my_module import add
def test_add_integers():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(-1, -1) == -2
def test_add_floats():
assert add(1.1, 2.2) == 3.3
assert add(-1.1, 1.1) == 0.0
assert add(-1.1, -1.1) == -2.2
def test_add_strings():
assert add('hello', ' world') == 'hello world'
- 运行测试:
pytest test_my_module.py
pytest
会自动发现和运行测试,并生成详细的输出。
总结
通过以上步骤,你可以在 Python 中编写和运行单元测试,以确保你的代码按预期工作。使用 unittest
是一个很好的开始,随着需求的增加,可以探索 pytest
等更强大的测试框架。