【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.mzph.cn/news/659292.shtml

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

相关文章

鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

在2023年云栖大会上,阿里云数据库产品事业部负责人李飞飞在主题演讲中提到,瑶池数据库推出“DB存储”一体化能力,结合人工智能、机器学习、存储等方法和创新能力,实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的…

01神经网络的理论及实现

感知机的缺点就是需要设置合适的权重,而权重的设置都是人工操作的。 1、从感知机到神经网络 重新画出感知机的模型,在图上加上偏置,由于偏置始终为1,所以颜色加深。 图1-1 感知机模型 引入新函数(激活函数)&#xff…

2024前端面试题汇总

2024前端面试题汇总 1、全局变量与局部变量2、Vue3 区分ref 与 reactive 的原因3、关于服务端渲染(SSR)与客户端渲染(CSR)的理解4、单页面应用(SPA)与多页面应用(MPA)的优劣5、Vue2 …

计算机二级Python选择题考点——Python语言程序设计Ⅱ

代码1&#xff1a; def fibRate(n):if n < 0:return -1elif n 1:return -1elif n 2:return 1else:L [1,5]for i in range(2,n):L.append(L[-1] L[-2])return L[-2] % L[-1] print(fibRate(7))n 7 L [1,5] i 2 , 3 , 4 , 5 , 6 i 2 -> L[-1] L[-2] 5 1 6 -&g…

Linux逻辑卷(LV)扩容

Linux逻辑卷&#xff08;LV&#xff09;扩容 1、准备物理磁盘&#xff08;分区和不分区都行&#xff09;&#xff0c;可以使用lsblk命令查看新增的磁盘&#xff0c;如下图sde就是我们新增磁盘&#xff0c;容量为600G。 2、将新磁盘变成物理卷&#xff08;PV&#xff09; pvcr…

缓存的概念

文章目录 一、系统缓存buffer与cachecache 的保存位置cache 的特性 二、用户层缓存DNS缓存 三、浏览器缓存过期机制最后修改时间Etag标记过期时间 expires混合使用和缓存刷新缓存刷新 cookie和session 四、CDN缓存什么是CDN用户请求CDN流程利用 302 实现转发请求重定向至最优服…

RabbitMQ 死信队列应用

1. 概念 死信队列&#xff08;Dead Letter Queue&#xff09;是在消息队列系统中的一种特殊队列&#xff0c;用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”&#xff0c;例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时&#xff0c;…

【数据分享】1929-2023年全球站点的逐月最高气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

Leetcode1109. 航班预订统计

Every day a Leetcode 题目来源&#xff1a;1109. 航班预订统计 解法1&#xff1a;差分数组 注意到一个预订记录实际上代表了一个区间的增量。我们的任务是将这些增量叠加得到答案。因此&#xff0c;我们可以使用差分解决本题。 代码&#xff1a; /** lc appleetcode.cn i…

asp.net core监听本地ip地址

开发asp.net core的时候遇到一个问题我想提供访问供其他同事测试&#xff0c;但是默认都是localhost或者127.0.0.1。我想换成我的Ip地址访问但是不行&#xff0c;百度搜索需要更换监听的地址即修改launchSettings.json&#xff0c;修改为0.0.0.0:5248&#xff0c;这样不管local…

力扣hot100 跳跃游戏 II 贪心 思维

Problem: 45. 跳跃游戏 II 思路 &#x1f468;‍&#x1f3eb; 参考 每次在上次能跳到的范围&#xff08;end&#xff09;内选择一个能跳的最远的位置&#xff08;也就是能跳到max_far位置的点&#xff09;作为下次的起跳点 &#xff01; Code ⏰ 时间复杂度: O ( n ) O(n…

DVI接口主机连接VGA显示器解决方案:DVI转VGA转换器DV

DVI转VGA转换器概述 DVI转VGA转换器能够将DVI数字信号转换成VGA模拟信号&#xff0c;通过VGA线缆传输给VGA显示设备使用&#xff0c;这样就能实现DVI接口主机连接VGA接口的显示器。 DVI转VGA转换器DV DVI转VGA转换器DV接口说明 DVI转VGA转换器DV接口介绍 DVI转VGA转换器连接示…

Spring Boot集成RocketMQ

本文目的是&#xff1a;教会你使用Spring Boot集成RocketMQ。 pom.xml文件引入rocketMQ依赖 <!-- rocketmq 依赖--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId>&…

XCTF:warmup[WriteUP]

CtrlU查看页面源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…

深度学习侧信道攻击的集成方法

深度学习侧信道攻击的集成方法 深度学习侧信道攻击的集成方法项目背景与意义摘要项目链接作者数据集CHES CTF 数据集ASCAD FIXED KEY 数据集ASCAD RANDOM KEY 数据集 代码代码执行神经网络 深度学习侧信道攻击的集成方法 项目背景与意义 在TCHES2020&#xff08;第4期&#x…

安卓线性布局LinearLayout

<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:…

如何用MapTalks IDE来发布网站?

简介 MapTalks IDE 全称 MapTalks集成设计环境&#xff08;Integrated Design Environment&#xff09;&#xff0c;是由MapTalks技术团队开发的新一代web地图设计软件。 通过MapTalks IDE&#xff0c;您可以自由的创建二维和三维地图&#xff0c;在其中载入或创建地理数据&a…

【数据结构与算法】之哈希表系列-20240130

这里写目录标题 一、383. 赎金信二、387. 字符串中的第一个唯一字符三、389. 找不同四、409. 最长回文串五、448. 找到所有数组中消失的数字六、594. 最长和谐子序列 一、383. 赎金信 简单 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不…

【Midjourney】新手指南:命令

1./ask 向Midjourney提问&#xff0c;不过问题和回答都是英文的&#xff0c;例如&#xff1a; 2./blend 将两张图片合并为一张 ​ 3./describe 上传一张图片&#xff0c;Midjourney会生成四组该图片相关的关键词&#xff0c;可以使用这些关键词再生成图片。 ​ 4./turbo …