00375 从零开始:Python unittest 单元测试入门指南


前言

作为一名刚接触 Python 自动化测试的新手,你可能会觉得“写测试”听起来是一件很高级、甚至有些复杂的事情。但实际上,测试就是用代码来检查你的代码是否按照预期工作。

Python 内置了一个非常强大且易用的测试框架——unittest。今天,我们就通过这篇博客,带你轻松迈出单元测试的第一步!


为什么我们需要单元测试?

在正式开始敲代码之前,先弄清楚“为什么”。

  • 捉虫利器:在代码合并或发布前,提前发现隐藏的 Bug。
  • 重构的底气:当你修改了老代码,跑一遍测试就能立刻知道自己有没有破坏原有的功能。
  • 最好的文档:测试用例直接展示了你的函数应该怎么用、预期的输出是什么。

核心概念:unittest 的三大基石

使用 unittest 就像是在搭积木,你只需要掌握以下几个核心概念:

  1. TestCase (测试用例):测试的基础单元。我们需要创建一个类,并继承 unittest.TestCase
  2. 测试方法:在测试类中,所有以 test_ 开头的方法都会被当作测试自动运行。
  3. 断言 (Assertions):这是测试的灵魂。断言用来判断“实际结果”和“预期结果”是否一致。比如 assertEqual(a, b) 就是判断 ab 是否相等。

实战演练:写下你的第一个测试

假设我们写了一个非常简单的函数,用于将两个数字相加。我们将它保存在 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 还有很多高级特性,比如 setUptearDown(用于在测试前后准备和清理数据)、Mock(用于模拟复杂的依赖对象)等,这些我们可以在后续的文章中慢慢探索。

现在,去给你的项目加上几行测试代码吧,让你的代码更加健壮!


第三百七十五篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录