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

news2024/9/21 4:30:38

在python中使用单元测试unittest


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

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

在我们开始冒险之前,先来思考一下为什么单元测试如此重要。嗯,首先,它们让我们的代码更可靠,保证了我们的函数和方法按照预期运行。而且,单元测试还是代码质量的守护者,一旦引入新的功能或者修复一个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

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

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

附录

完整代码:

#!/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()

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

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

相关文章

如何访问 Oracle OKE 集群

OKE是Oracle Cloud提供的托管Kubernetes服务,为用户提供强大而灵活的容器编排平台。在本文中,我们将详细介绍如何有效地与OKE集群进行交互,包括访问集群的不同方式、管理访问权限以及执行常见操作的步骤。 1 安装oci命令 1.1 在Oracle Linux…

智慧城市行业盛会:2024北京国际智慧城市展览会(世亚智博会)

随着科技的飞速进步和人们生活水平的不断提高,智慧城市建设已经逐渐成为当今社会的重要议题。为了展示和推广国内外数字技术与新应用成果,引领数字产业发展新方向,积极推动5G、人工智能、大数据、云计算、物联网、移动互联网、元宇宙等新型数…

Java编程练习之类的封装

1.把一个Student类封装起来,模拟一个转校生转入新学校后为其制作学生信息的过程。运行结果如下: package zhtestdemo; import java.util.Scanner; import java.text.DecimalFormat; public class demo { //创建类,类名叫demo; private Stud…

Transformer 自然语言处理(二)

原文:Natural Language Processing with Transformers 译者:飞龙 协议:CC BY-NC-SA 4.0 第五章:文本生成 基于 Transformer 的语言模型最令人不安的特点之一是它们生成的文本几乎无法与人类写的文本区分开。一个著名的例子是 Ope…

二、人工智能之提示工程(Prompt Engineering)

黑8说 岁月如流水匆匆过,哭一哭笑一笑不用说。 黑8自那次和主任谈话后,对这个“妖怪”继续研究,开始学习OpenAI API!关注到了提示工程(Prompt Engineering)的重要性,它包括明确的角色定义、自然语言理解(…

VSCode 设置代理

Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings.

pysyft框架中WebsocketClientWorker与WebsocketServerWorker的消息传输

引言 pysyft是基于pytorch的一个联邦学习框架(虽然用起来很难受),通过内存管理实现联邦学习的模拟。 在pysyft中,WebsocketServerWorker充当数据的提供方(数据存储方),而WebsocketClientWorker…

RocketMQ—RocketMQ安装

RocketMQ—RocketMQ安装 在安装RocketMQ之前需要先安装Jdk,并配置JAVA_HOME环境变量。 在安装之前我们要先下载RocketMQ的安装包。 下载 到RocketMQ的官网https://rocketmq.apache.org/ 选择Download。 本文使用4.9.2版本。 将下载页面拉到最后面,有…

推荐系统|排序_MMOE

MMOE MMOE是指Multi-gate Mixture-of-Experts 注意看Expert后面加了s,说明了有多个专家。 而在MMOE中专家是指用来对输入特征计算的神经网络,每个神经网络根据输入计算出来的向量都会有所不同。 MMOE的低层 MMOE的上一层 通过MMOE的低层算出的向量和权…

Zookeeper分布式队列实战

目录 Zookeeper分布式队列 普通方式实现 设计思路 具体实现 使用Curator实现 具体实现 注意事项 Zookeeper分布式队列 常见的消息队列有:RabbitMQ,RocketMQ,Kafka等。Zookeeper作为一个分布式的小文件管理系统,同样能实现简单的队列功…

使用Markdown写作的魔力

今年的年终总结报告,我是用Markdown写的,只花了大概2.5天的时间,包括统计任务数据,时效,总结成果,挖掘不足,提出改善措施和计划。 将全部文字内容的.md文档,导出为word,然后用了做PPT的AI,设计了PPT,再修改了半天,就完成了。 上周为两个代码工程,用Markdown写了r…

Kubernetes operator(五)api 和 apimachinery 篇【更新中】

云原生学习路线导航页(持续更新中) 本文是 Kubernetes operator学习 系列第五篇,主要对 k8s.io/api 和 k8s.io/apimachinery 两个项目 进行学习Kubernetes operator学习系列 快捷链接 Kubernetes operator(一)client-g…

PyCharm / DataSpell 导入WSL2 解析器,实现GPU加速

PyCharm / DataSpell 导入WSL2 解析器的实现 Windows的解析器不好么?设置WSL2和实现GPU加速为PyCharm / DataSpell 设置WSL解析器设置Interpreter Windows的解析器不好么? Windows上的解析器的确很方便,也省去了我们很多的麻烦。但是WSL2的解…

Ubuntu-22.04上ToDest设置开机不弹出图形界面

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、开始操作1.设置图形端 总结 前言 有时候远程成为开发必不可少的工具,目前国内有很多相关的软件,比较有名的是向日葵、ToDesk、Rust…

Docker基础(持续更新中)

# 第1步,去DockerHub查看nginx镜像仓库及相关信息# 第2步,拉取Nginx镜像 docker pull nginx# 第3步,查看镜像 docker images # 结果如下: REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 60…

黑马程序员前端web入门:新浪新闻

黑马程序员前端web入门:新浪新闻 几点学习到的: 设置li无圆点: list-style: none;设置a无下划线:text-decoration: none;a属于行内元素,高度hegiht不起作用,可以设置 display: block; 把它变成块元素。此时&#xff0c…

20240131在WIN10下配置whisper

20240131在WIN10下配置whisper 2024/1/31 18:25 首先你要有一张NVIDIA的显卡,比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡!】800¥ 2、请正确安装好NVIDIA最新的545版本的驱动程序和CUDA。 2、安装Torch 3、配置whisper http…

【简便方法和积累】pytest 单元测试框架中便捷安装插件和执行问题

又来进步一点点~~~ 背景:之前写了两篇关于pytest单元测试框架的文章,本篇内容对之前的做一个补充 一、pytest插件: pytest 有非常多的插件,很方便,以下为插件举例: pytest,pytest-html&#x…

leetcode刷题(剑指offer) 19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出&am…

双异步系列完结撒花,如何解決异步事务问题?

目录 一、前情提要原始需求:读取一个10万行的Excel优化1:[**使用双异步后,从 191s 优化到 2s**](https://blog.csdn.net/guorui_java/article/details/135143234)优化2:[**使用双异步后,如何保证数据一致性&#xff1f…