前言
作为一名刚接触 Python 自动化测试的新手,你可能会觉得“写测试”听起来是一件很高级、甚至有些复杂的事情。但实际上,测试就是用代码来检查你的代码是否按照预期工作。
Python 内置了一个非常强大且易用的测试框架——unittest。今天,我们就通过这篇博客,带你轻松迈出单元测试的第一步!
为什么我们需要单元测试?
在正式开始敲代码之前,先弄清楚“为什么”。
- 捉虫利器:在代码合并或发布前,提前发现隐藏的 Bug。
- 重构的底气:当你修改了老代码,跑一遍测试就能立刻知道自己有没有破坏原有的功能。
- 最好的文档:测试用例直接展示了你的函数应该怎么用、预期的输出是什么。
核心概念:unittest 的三大基石
使用 unittest 就像是在搭积木,你只需要掌握以下几个核心概念:
TestCase(测试用例):测试的基础单元。我们需要创建一个类,并继承unittest.TestCase。- 测试方法:在测试类中,所有以
test_开头的方法都会被当作测试自动运行。 - 断言 (Assertions):这是测试的灵魂。断言用来判断“实际结果”和“预期结果”是否一致。比如
assertEqual(a, b)就是判断a和b是否相等。
实战演练:写下你的第一个测试
假设我们写了一个非常简单的函数,用于将两个数字相加。我们将它保存在 calculator.py 文件中:
# calculator.py
def add(x, y):
return x + y
现在,我们要为这个函数写测试。新建一个名为 test_calculator.py 的文件:
# test_calculator.py
import unittest
from calculator import add
# 1. 继承 unittest.TestCase
class TestCalculator(unittest.TestCase):
# 2. 测试方法必须以 test_ 开头
def test_add_positive_numbers(self):
result = add(2, 3)
# 3. 使用断言检查结果是否等于 5
self.assertEqual(result, 5)
def test_add_negative_numbers(self):
result = add(-1, -1)
self.assertEqual(result, -2)
if __name__ == '__main__':
unittest.main()
运行测试
写完测试后,该怎么运行它呢?打开你的命令行终端,进入这两个文件所在的目录。
方法一:直接运行测试文件
python test_calculator.py
方法二:使用 discover 自动发现并运行
这就是我们在刚接触 unittest 时非常实用的技巧。如果你把所有的测试代码都放在了一个专门的测试目录下,你可以使用以下命令让 Python 自动帮你找并运行测试:
python -m unittest discover -s test
(提示:如果你只想运行某个特定的测试文件,还可以像 python -m unittest discover -s test -p 'test_calculator.py' 这样通过匹配模式精确指定哦!)
常用断言方法速查表
在编写测试时,你会经常用到不同的断言方法。这里为你整理了几个最常用的:
| 断言方法 | 检查内容 |
|---|---|
assertEqual(a, b) |
a == b |
assertNotEqual(a, b) |
a != b |
assertTrue(x) |
bool(x) 结果为 True |
assertFalse(x) |
bool(x) 结果为 False |
assertIsNone(x) |
x is None |
结语
恭喜你!现在你已经写下并运行了人生中的第一个 Python 单元测试。unittest 还有很多高级特性,比如 setUp 和 tearDown(用于在测试前后准备和清理数据)、Mock(用于模拟复杂的依赖对象)等,这些我们可以在后续的文章中慢慢探索。
现在,去给你的项目加上几行测试代码吧,让你的代码更加健壮!
第三百七十五篇博文写完,开心!!!!
今天,也是充满希望的一天。