在python中使用单元测试unittest方式

 更新时间:2026年01月23日 08:47:55   作者:babybin  
单元测试是保障代码质量和功能的重要工具,通过它们可以验证代码的正确性和可靠性,本篇文章介绍了如何使用Python的unittest模块进行单元测试,并通过实例展示了如何编写、运行和扩展测试

为什么单元测试如此重要?

在我们开始冒险之前,先来思考一下为什么单元测试如此重要。

嗯,首先,它们让我们的代码更可靠,保证了我们的函数和方法按照预期运行。而且,单元测试还是代码质量的守护者,一旦引入新的功能或者修复一个Bug,只需运行测试,就能够确保不会对现有的功能产生负面影响。

第一步:准备好你的工具

在我们的冒险开始之前,确保你已经准备好了最重要的武器:Python和unittest模块。

当然,你也可以选择其他测试框架,但unittest是Python内建的,简单而有效。

# unitest_example1.py

import unittest

class MyTestCase(unittest.TestCase):
    def test_hello_world(self):
        result = "Hello, World!"
        self.assertEqual(result, "Hello, World!")

第二步:让测试跑起来!

现在,让我们看看这个测试是如何运作的。

简单的测试函数,通过 assertEqual 断言我们的结果是否和期望一致。运行测试:

python -m unittest unittest_example1.py

第三步:享受成功的喜悦

你听到了吗?那是代码在默默地说:“我没有Bug!” 这种感觉,就像是踏入夏日冰淇淋店的凉意,清新又令人愉悦。

第四步:扩展你的冒险

单元测试的美妙之处在于,一旦你开始,你就会迷上它。不断扩展你的测试套件,覆盖更多的代码路径。尝试参数化测试,用更少的代码覆盖更多的场景。

注意:parameterized.expand 并不是 unittest 模块中的一部分,它实际上来自于 parameterized 模块,该模块并不是 Python 标准库的一部分。

为了使用 parameterized.expand,您需要安装 parameterized 模块。

pip install parameterized
#!/usr/bin/env python
# coding=utf-8
# @Time    : 2024/1/31 15:40

# unittest_examples2.py

import unittest

from parameterized import parameterized

def add_numbers(a, b):
    return a + b

class AdvancedTestCase(unittest.TestCase):
    @parameterized.expand([
        ("case1", 1, 2, 3),
        ("case2", -1, 2, 1),
        ("case3", 0, 0, 0),
        ("case4", 0, 0, 2),
    ])
    def test_addition(self, name, a, b, expected):
        result = add_numbers(a, b)
        self.assertEqual(result, expected)


if __name__ == '__main__':
    unittest.main()

# python -m unittest unittest_examples2.py
# python3 -m unittest unittest_examples2.py

我特意加了一个错误的case4,运行代码:

python3 -m unittest unitest_example2.py

结语:单元测试是一场愉快的冒险!

在我们的技术冒险中,我们发现了单元测试的美妙之处。它不仅保护了我们的代码,还让我们充满信心地迎接新的挑战。

附录

完整代码:

#!/usr/bin/env python
# unitest_example1.py

import unittest


class MyTestCase(unittest.TestCase):
    def setUp(self):
        # 在测试前的准备工作
        self.data = [1, 2, 3]

    def test_something(self):
        # 测试代码
        result = 1 + 1

        # 使用 assert 断言检查结果是否等于 2
        self.assertEqual(result, 2)

        # 使用 assert 断言检查列表中是否包含特定元素
        self.assertIn(2, self.data)

        # 使用 assert 断言检查条件是否为真
        self.assertTrue(result == 2)

        # 使用 assert 断言检查条件是否为假
        self.assertFalse(result != 2)

        # 使用 assert 断言检查两个值是否不相等
        self.assertNotEqual(result, 3)

        # 使用 assert 断言检查某个值是否为 None
        self.assertIsNone(None)

        # 使用 assert 断言检查某个值是否不为 None
        self.assertIsNotNone(result)

        # 使用 assert 断言检查字符串是否以特定前缀开头
        self.assertTrue("hello".startswith("he"))

    def tearDown(self):
        # 在测试后的清理工作
        del self.data


def run():
    loader = unittest.TestLoader()
    suite = loader.loadTestsFromTestCase(MyTestCase)


if __name__ == "__main__":
    unittest.main()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用sleep间隔进行python反爬虫的实例讲解

    用sleep间隔进行python反爬虫的实例讲解

    在本篇文章里小编给大家整理了一篇关于用sleep间隔进行python反爬虫的实例讲解内容,有需要的朋友们可以学习下。
    2020-11-11
  • Python中实现定时任务常见的几种方式

    Python中实现定时任务常见的几种方式

    在Python中,实现定时任务是一个常见的需求,无论是在自动化脚本、数据处理、系统监控还是其他许多应用场景中,Python提供了多种方法来实现定时任务,包括使用标准库、第三方库以及系统级别的工具,本文将详细介绍几种常见的Python定时任务实现方式
    2024-08-08
  • 解决使用export_graphviz可视化树报错的问题

    解决使用export_graphviz可视化树报错的问题

    今天小编就为大家分享一篇解决使用export_graphviz可视化树报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python中关于py文件之间相互import的问题及解决方法

    python中关于py文件之间相互import的问题及解决方法

    这篇文章主要介绍了python中关于py文件之间相互import的问题,本文用一个例子演示下如何解决python中循环引用的问题,需要的朋友可以参考下
    2022-02-02
  • Python实现DBSCAN聚类算法并样例测试

    Python实现DBSCAN聚类算法并样例测试

    聚类是一种机器学习技术,它涉及到数据点的分组,聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。本文给大家分享Python实现DBSCAN聚类算法并样例测试,感兴趣的朋友一起看看吧
    2021-06-06
  • Python实现自动化发送邮件

    Python实现自动化发送邮件

    大家好,本篇文章主要讲的是Python实现自动化发送邮件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • python爬虫获取京东手机图片的图文教程

    python爬虫获取京东手机图片的图文教程

    下面小编就为大家分享一篇python爬虫获取京东手机图片的图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python3获取拉勾网招聘信息的方法实例

    Python3获取拉勾网招聘信息的方法实例

    这篇文章主要给大家介绍了关于Python3获取拉勾网招聘信息的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python3具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • python实现对csv文件的列的内容读取

    python实现对csv文件的列的内容读取

    今天小编就为大家分享一篇python实现对csv文件的列的内容读取,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python 使用指定的网卡发送HTTP请求的实例

    Python 使用指定的网卡发送HTTP请求的实例

    今天小编就为大家分享一篇Python 使用指定的网卡发送HTTP请求的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论