【python】在python中使用单元测试unittest

在python中使用单元测试unittest


大家好,欢迎来到我的技术乐园!今天,我们将一起踏入Python单元测试的奇妙旅程,探索这个让我们的代码更可靠、更强壮的令人愉快的世界。

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

在我们开始冒险之前,先来思考一下为什么单元测试如此重要。嗯,首先,它们让我们的代码更可靠,保证了我们的函数和方法按照预期运行。而且,单元测试还是代码质量的守护者,一旦引入新的功能或者修复一个Bug,只需运行测试,就能够确保不会对现有的功能产生负面影响。

第一步:准备好你的工具

在我们的冒险开始之前,确保你已经准备好了最重要的武器:Python和unittest模块。当然,你也可以选择其他测试框架,但unittest是Python内建的,简单而有效。

# unitest_example1.pyimport unittestclass 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.pyimport unittestfrom parameterized import parameterizeddef add_numbers(a, b):return a + bclass 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

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

在我们的技术冒险中,我们发现了单元测试的美妙之处。它不仅保护了我们的代码,还让我们充满信心地迎接新的挑战。所以,让我们继续这场愉快的冒险,发现更多Python技术的乐趣吧!

附录

完整代码:

#!/usr/bin/env python
# unitest_example1.pyimport unittestclass MyTestCase(unittest.TestCase):def setUp(self):# 在测试前的准备工作self.data = [1, 2, 3]def test_something(self):# 测试代码result = 1 + 1# 使用 assert 断言检查结果是否等于 2self.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 断言检查某个值是否为 Noneself.assertIsNone(None)# 使用 assert 断言检查某个值是否不为 Noneself.assertIsNotNone(result)# 使用 assert 断言检查字符串是否以特定前缀开头self.assertTrue("hello".startswith("he"))def tearDown(self):# 在测试后的清理工作del self.datadef run():loader = unittest.TestLoader()suite = loader.loadTestsFromTestCase(MyTestCase)if __name__ == "__main__":unittest.main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442482.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网加竞赛 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

StarRocks -- 基础概念(数据模型及分区分桶)

1. 数据模型 StarRocks提供四种数据模型: Duplicate Key, Aggregate Key, Unique Key, Primary Key 1.1 Duplicate Key 适用场景: 分析原始数据,如原始日志和原始操作记录。可以使用多种方法查询数据,不受预聚合方法的限制。加…

阿里十年 “帕鲁” 手把手带你 学习 ThreadLocal

阿里十年 “帕鲁” 手把手带你 学习 ThreadLocal 文章目录 阿里十年 “帕鲁” 手把手带你 学习 ThreadLocal前言目录ThreadLocal代码演示ThreadLocal的数据结构GC 之后 key 是否为 null?ThreadLocal.set()方法源码详解ThreadLocalMap Hash 算法ThreadLocalMap Hash …

Docker的使用方式

一、Docker概念 Docker类似于一个轻量的虚拟机。 容器和镜像是Docker中最重要的两个概念,镜像可以保存为tar文件,Dockerfile是配置文件,仓库保存了很多第三方已经做好的镜像。 基本指令 查找镜像 docker search nginx 拉取nginx镜像 do…

亚信安慧AntDB:AntDB-M元数据锁(十)

5.8 锁等待及通知 每个线程的锁上下文都有一个条件变量来进行锁等待。线程在没有获取锁的授权时,会将自己的ticket添加到锁对象的等待队列,并进入等待状态。等待队列的锁授予检测有3个时机: 1)加锁申请阶段,hog,pigl…

海外云手机开辟企业跨境电商新道路

近几年,海外云手机为跨境电商、海外媒体引流、游戏行业等互联网领域注入了蓬勃活力。对于国内跨境电商而言,在亚马逊及其他平台上,短视频引流和社交电商营销成为最为有效的流量来源。如何通过海外云手机的助力,在新兴社交平台为企…

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括: 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

数据结构—栈实现前缀表达式的计算

前缀表达式计算 过程分析 中缀表达式:(1 5)*3 > 前缀表达式:*153 (可参考这篇文章:中缀转前缀) 第一步:从右至左扫描前缀表达式(已存放在字符数组中)&a…

华为VRP系统简介

因为现在国内主流是华为、华三、锐捷的设备趋势,然后考的证书也是相关的,对于华为设备的一个了解也是需要的。 一、VRP概述 华为的VRP(通用路由平台)是华为公司数据通信产品的通用操作系统平台,作为华为公司从低端到核心的全系列路由器、以太…

《Lua程序设计》-- 学习9

迭代器和泛型for 迭代器和闭包 迭代器(iterator)是一种可以让我们遍历一个集合中所有元素的代码结构。在Lua语言中,通常使用函数表示迭代器:每一次调用函数时,函数会返回集合中的“下一个”元素。 一个闭包就是一个…

App全测试扫描漏洞工具

APP 有漏洞被测要下架,怎么处理? 如题,今天被问到:市面上有什么好的 APP 漏洞扫描工具推荐?我们的 APP 有漏洞,需要下架 APP? 前言 事情的经过是这样的: 1:学员公司测试…

企业网络基础架构监控工具

IT 基础架构已成为提供基本业务服务的基石,无论是内部管理操作还是为客户托管的应用程序服务,监控 IT 基础设施至关重要,并且已经建立起来,SMB IT 基础架构需要简单的网络监控工具来监控性能和报告问题。通常,几个 IT …