如何使用unittest和pytest进行python脚本的单元测试

1. 关于unittest和pytest

unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试
代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。
pytest是第三方支持单元测试的扩展库,他和unittest配合,可以使你在为一个新的源码文件编写测试代码时,不用手动定义程序入口,以及要执行哪些表示测试的函数或类。你只需按照一个”套路“写测试代码,它会帮你运行测试,汇总测试结果(覆盖率,通过率等等)

2. 单元测试代码的编写

假设我有一个名为”X.py"的脚本文件,其中定义了一个名为A的类,我想对A中的方法add和mult进行测试:

class A:def fun(a:int,b:int)->int:return a+bdef multi(a:int,b:int)->int:return a*b

则推荐的编写测试A的流程如下:

2.1 新建一个名为test_A.py文件

这个文件用于存放对A这个类进行单元测试的代码。一般来说,建议把你项目中所有测试模块文件都放到项目根目录下的tests目录中,便于维护。

2.2 在test_A.py文件中定义测试类(继承unittest.TestCase)

from unittest import TestCase
class TestA(TestCase):def setUp(self):"""所有以test_开头的方法执行之前都会调用该方法,通常在这个方法中创建一个或若干你要测试的类的实例"""...self.obj_a = A(...)...def test_add(self):result = self.obj_a.add(3,5)self.assertEqual(result,8) #检测结果是否为期望值8,若不是,该测试方法不通过def test_multi(self):result = self.obj_a.multi(4,5)self.assertEqual(result,20) #功能与上类似,TestCase还提供了很多其他以assert为前缀的方法,满足我们将实际运行结果与期望值比较的需求。

2.3 运行测试代码文件,查看测试结果

如果不使用pytest扩展库,你还需要写一段样板代码,类似如下:

def main():...test_a = TestA()test_a.test_add()test_a.test_multi()...

这令人烦恼。好在pytest让你可以省去这个麻烦,只要你安装好了pytest,那么,可以采取两种方法运行测试:
方法1:命令行运行pytest执行单元测试
方法2:在pycharm环境执行单元测试

2.3.1 在命令行下允许pytest单元测试

命令行下,进入tests目录,执行如下命令:
pytest
即可看到所有以test_开头的方法或函数的执行过程及结果。
记住,最好是虚拟环境下安装包括pytest在内的各种扩展库。

2.3.2 在pycharm IDE下运行测试

这个非常方便,打开测试脚本文件,单击下图所示的运行按钮,即可出现测试结果。
在这里插入图片描述

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

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

相关文章

nodejs操作gitee图床上传更新和删除

新建文件夹 使用vscode打开当前文件夹 初始化项目 npm init-y安装axios npm install axios根目录下放个图片文件,如aaa.png 在根目录下创建app.js文件 输入以下内容 console.log(11111)运行项目 node ./app.js终端只要打印出111就代表项目创建完成了 创建token令牌 点…

【深度解析】WRF-LES与PALM微尺度气象大涡模拟

查看原文>>>【深度解析】WRF-LES与PALM微尺度气象大涡模拟 针对微尺度气象的复杂性,大涡模拟(LES)提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟,这些过程往往与天气模式、地形影响和…

Linux - 模拟实现 shell 命令行解释器

目录 简介 shell 的重要性 解释为什么学习 shell 的工作原理很重要 模拟实现一个简单的 shell 循环过程 1. 获取命令行 2. 解析命令行 3. 建立一个子进程(fork) 4. 替换子进程(execvp) 5. 父进程等待子进程退出(wai…

合宙LuatOS AIR700 IPV6 TCP 客户端向NodeRed发送数据

为了验证 AIR700 IPV6 ,特别新建向NodeRed Tcp发送的工程。 Air700发送TCP数据源码如下: --[[ IPv6客户端演示, 仅EC618系列支持, 例如Air780E/Air600E/Air780UG/Air700E ]]-- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "IPV6_SendDate_N…

Jupyter安装指南:最简便最详细的步骤

一.介绍 JupyterNotebook 是一个款以网页为基础的交互计算环境,可以创建Jupyter的文档,支持多种语言,包括Python, Julia, R等等。一般来说,如果是使用R语言的话,使用Rstudio居多,使用Python的话&#xff0…

【STM32单片机_(HAL库)】3-2-3【中断EXTI】【电动车报警器项目】433M无线收发模块实验

1.硬件 STM32单片机最小系统433M无线收发模块LED灯模块 2.软件 驱动文件添加GPIO常用函数中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "exti.h"int main(void) {HAL_Init(); …

用Python实现生信分析——隐马尔可夫模型(HMM)在生物信息学中的应用详解

在生物信息学中,隐马尔可夫模型(HMM) 被广泛应用于基因组注释、蛋白质结构预测、基因预测等领域。以下是针对生物信息学应用的详细讲解,包括案例、Python实现、运行结果和分析。 1. HMM在生物信息学中的应用场景 HMM在生物信息学…

开源的数据库增量订阅和消费的中间件——Cancl

目录 工作原理 MySQL主备复制原理 Canal 工作原理 主要功能和特点 应用场景 实验准备 安装JDK11 下载MySQL8.0 配置canal.admin 配置canal-deployer 测试数据读取 新增一台主机用做被同步的目标机器测试 官方地址:https://github.com/alibaba/canal?ta…

【gitlab】gitlab-ce:17.3.0-ce.0 1:使用docker engine安装

ce版本必须配置代理。 极狐版本可以直接pull 社区版GitLab不支持Alibaba Cloud Linux 3,本操作以Ubuntu/Debian系统为例进行说明,其他操作系统安装说明,请参见安装社区版GitLab。 docker 环境重启 sudo systemctl daemon-reload sudo systemctl restart docker脚本安装 安裝…

宝塔面板实现定时任务删除 logs文件 加条件删除 只删除一个月前的日志

我们在开发中难免用到了日志功能,随着日志越来越多导致占用我们的内存 下面是一个简单的 使用宝塔面板里面的定时任务来实现删除日志案例 第一步 首先我的日志文件目录 都在log文件夹里面, 每个月生成一个日志文件夹 文件夹命名是年月来命名的 第二…

使用 C++ 实现一个简单的数据库连接池

使用 C 实现一个简单的数据库连接池 在现代应用程序中,数据库连接的管理是一个重要的性能瓶颈。频繁地创建和销毁数据库连接会导致显著的性能下降。为了解决这个问题,连接池技术应运而生。本文将介绍如何使用 C 实现一个简单的数据库连接池,…

探索深度学习的力量:从人工智能到计算机视觉的未来科技革命

目录 1. 引言 2. 人工智能的历史背景 3. 深度学习的崛起 3.1 深度神经网络的基本原理 4. 计算机视觉的发展现状 4.1 传统计算机视觉与深度学习的结合 5. 深度学习在计算机视觉中的应用 5.1 图像分类 5.2 目标检测 6. 深度学习引领的未来科技创新与变革 7. 结论 引言…

【vue3+Typescript】手撸了一个轻量uniapp导航条

最近公共组件写到导航条,本来打算拿已有的改。看了下uniapp市场上已有的组件,一是不支持vue3typescript,二是包装过重。索性自己手撸了一个导航条,不到100行代码全部搞定,因为自己的需求很简单: 1&#xf…

Python模块篇(五)

模块 模块与包模块的导入与使用标准库的常用模块第三方库的安装与使用(如:pip工具) 模块与包 模块是一个包含 Python 代码的文件,通常以 .py 作为扩展名。一个模块可以包含函数、类、变量,以及可执行的代码段。模块的…

pycharm2023.1破解

下载解压文件,文件夹 /jetbra 复制电脑某个位置 注意: 补丁所属文件夹需单独存放,且放置的路径不要有中文与空格,以免 Pycharm 读取补丁错误。 点击进入 /jetbra 补丁目录,再点击进入 /scripts 文件夹,双…

leetcode_55. 跳跃游戏

55. 跳跃游戏 题目描述:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回…

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量,以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…

鸿蒙内核源码分析——(自旋锁篇)

本篇说清楚自旋锁 读本篇之前建议先读系列篇 进程/线程篇. 内核中哪些地方会用到自旋锁?看图: 概述 自旋锁顾名思义,是一把自动旋转的锁,这很像厕所里的锁,进入前标记是绿色可用的,进入格子间后,手一带&#xff0c…

10分钟学会LVM逻辑卷

华子目录 前言认识LVMLVM基本概念LVM整体流程LVM管理命令pvs,vgs,lvs命令pvs基本用法选项示例 vgs基本用法选项示例 lvs基本用法 pvcreate,vgcreate,lvcreate命令pvcreate示例 vgcreate基本用法示例选项 lvcreate基本用法示例 pvr…

Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将…