python单元测试入门

编写基本的单元测试来验证代码的行为。
使用的库:unittest

单元测试框架

python的unittest库的基本单元测试框架可以表示为:

import unittestclass XXXTests(unittest.TestCase): # 第一个测试集@classmethoddef setUpClass(self):...self.x, self.y = _get_xy() # example funcdef test_a(self): # 第一个单元测试...def test_b(self): # 第二个单元测试self.assertEqual(self.x, self.y)class YYYTests(unittest.TestCase): # 第二个测试集...if __name__ == '__main__':unittest.main()

简单来说,派生的每个TestCase子类,表示一个单元测试集,其中的每个test_xxx函数,都是一个单独的单元测试。

组织单元测试时,可以按照层级式的划分来进行。在单个文件中,单元测试有两个层级:TestCase类派生,以及TestCase下的test_xxx函数。unittest的单元测试对函数名有要求,必须以test_开头,才能被当作一个测试函数存在。每个单元测试内可以存在多个assert函数。

单元测试可以直接写在源码文件中,在if __name__ == '__main__':时调用unittest.main(),使得只有在main直接运行源码文件才会进行单元测试。此外,通过__all__变量也能进一步约束对源码文件的导入行为,通过from xxx import *的形式导入该源码文件时,只能使用__all__中的成员。

__all__ = ['UsefulClass']
class UsefulClass():def __init__()### ---
# unittests
### ---
class ClassTests(unittest.TestCase):def test_UsefulClass():[some test code]

assert方法

在单元测试中,通过调用.assertXXX方法来自动验证某些关键信息。例如

# 输出形状
class ModelTests(unittest.TestCase):def test_asserts(self):x, y = get_xy()self.assertEqual(x, y)self.assertTrue(x==y)...

通常来讲,只要传入的参数有对应的重写运算符,就可以简单地调用.assertXXX方法来做验证。

使用单元测试检查深度学习组件的行为

可以通过简单检查输出shape的方法来测试深度学习组件的行为,例如

import torch
import torch.nn as nn
import unittest
from resnet50 import ResNet50class ConvTests(unittest.TestCase):def test_Conv2d(self):B, C, H, W = 5, 128, 28, 28x = torch.rand((B, C, H, W))conv = nn.Conv2d(in_channels=C, out_channels=C*2, kernel_size=3, stride=2, padding=1)out = conv(x)self.assertEqual(out.shape, torch.Size([B, C*2, H//2, W//2]))def test_ResNet50(self):input = _get_input()model = ResNet50()out = model(input)self.assertEqual(out.shape, torch.Size([shape values]))

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

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

相关文章

STM32蓝牙HID实战:打造低功耗、高性能的客制化键盘

一、项目概述 本项目旨在使用STM32单片机打造一款功能强大的蓝牙客制化键盘,它拥有以下特点: 九键布局,小巧便携: 满足日常使用需求,方便携带。全键可编程: 所有按键和旋钮均可通过电脑软件自定义快捷键,实现个性化功…

curl代理用户名或密码出现特殊字符时需要转义

举例:使用代理127.0.0.1:3128访问百度, 用户名peter, 密码123! 密码中包含,需要转义。 查询在线URL编码工具, %21是!的URL编码,curl使用方法如下: curl -x peter:123%21127.0.0.1:3128 https://www.baidu.com参考 https://www.u…

locally Holder continuous (non-Lipschitz)

locally Holder continuous (non-Lipschitz) Holder连续性和Lipschitz连续性是描述函数局部或全局性质的两种方式,它们之间存在联系但并不等同。 如果一个函数(f)在某区间上满足Lipschitz条件,即存在常数(K > 0),使得对任意(x, y)在该区间…

如何用java语言+若依开源框架开发一套数字化产科系统 数字化产科管理平台源码

如何用java语言若依开源框架开发一套数字化产科系统 数字化产科管理平台源码 要使用Java语言和若依(RuoYi)开源框架来开发一个数字化产科系统,你需要遵循一系列步骤,从环境搭建到系统设计与开发,再到测试与部署。 以下…

2023年问界M9 EV 问界M9增程维修手册和电路图线路图资料更新

此次更新了2023年问界M9 EV及问界M9增程维修手册和电路图资料,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等&#…

Redis的八种数据类型介绍

Redis 是一个高性能的键值存储,它支持多种丰富的数据类型。每种数据类型都有其特定的用途和底层实现。下面我将介绍 Redis 支持的主要数据类型及其背后的数据结构。 本人这里还有几篇详细的Redis用法文章,可以用来进阶康康! 1. 字符串 (Stri…

macOS笔记

1、MAC中抹掉就是格式化; 2、MAC中拔出U盘:在桌面找到U盘,点击右键显示“推出***”,点击退出。 3、MAC系统版本: macOS 11: Big Sur macOS 12 Monterey macOS 13 Ventura macOS 14 Sonoma macOS 15 Sequoia 4、通用快捷键&#xf…

关于Spring容器的一些理解:如何将类交给Spring容器管理,Spring容器如何实现将类进行自动注册

如果我要将一个类丢给Spring容器管理,我需要怎么做? 如果你想将一个类交给Spring容器管理,使其成为Spring的一个bean,通常可以通过以下几种方式来实现: 方式一、使用注解方式: Component 及其衍生注解&a…

ubuntu24.04LTS防火墙设置

Ubuntu24.04LTS开箱自带ufw,一定程度避免了开机下载ufw被攻击,excellent 转载aliyun教程 sudo ufw enbale可以启用并且开机自启(显示有效,未nmap实测) 教程3 转载自CSDN 完整格式如下: # 禁止IP连接端口 sudo ufw deny proto tc…

Cherno 游戏引擎笔记 (45~60)

有几个部分的笔记以图片形式呈现(如果没找到文本可以查看是否遗漏了图片笔记) My Github REPO(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno) 源码笔记,希望帮到你 :-} ---Shader Library(着色器库&…

南京观海微电子----AC/DC、DC/DC转换器知识

什么是AC? Alternating Current(交流)的首字母缩写。 AC是大小和极性(方向)随时间呈周期性变化的电流。 电流极性在1秒内的变化次数被称为频率,以Hz为单位表示。 什么是DC? Direct Current(直流…

visual studio远程调试

场景一(被远程调试的电脑) 确定系统位数 我这里是x64的 找到msvsmon.exe msvsmon.exe目录位置解释: “F:\App\VisualStudio\an\Common7\IDE\”是visual studio所在位置、 “Remote Debugger\”是固定位置、 “x64”是系统位数。 拼起来就是…

grid布局下的展开/收缩过渡效果【vue/已验证可正常运行】

代码来自GPT4o&#xff1a;国内官方直连GPT4o <template><div class"container"><button class"butns" click"toggleShowMore">{{ showAll ? 收回 : 显示更多 }}</button><transition-group name"slide-fade&…

数据库原理实验报告第二次-SQL Server SSMS工具创建和管理数据库及数据表.

题目 1、使用SSMS工具创建名为ecommerce的数据库&#xff0c;并查看或修改数据库属性 2、在数据库ecommerce中创建如下表&#xff1a; &#xff08;1&#xff09;商品类别表category 字段名 数据类型 允许NULL值 约束 字段说明 catno int 否 主键 商品类别编号 ca…

AI是在帮助开发者还是取代他们?

一&#xff1a;介绍 生成式人工智能&#xff08;AIGC&#xff09;在软件开发领域的应用确实为开发者带来了很多便利和效率提升。AI工具可以通过代码生成、错误检测、自动化测试等功能&#xff0c;帮助开发者更快速地开发和优化软件&#xff0c;减少重复性工作&#xff0c;提高…

哈喽GPT-4o,对GPT-4o 论文速写的思考与探索

作为一款强大的语言模型&#xff0c;ChatGPT 在论文写作上具备显著优势。它能够辅助学者或研究人员自动创建论文框架、摘要、文献综述及论文段落&#xff08;如引言、方法、结果、结论等&#xff09;。此外&#xff0c;ChatGPT 还能优化论文结构、润色、降低内容重复率&#xf…

比Proxmox VE更易用的免费虚拟化平台

之前虚拟化一直玩Proxmox VE&#xff0c;最近发现一个更易用的虚拟化软件CSYun&#xff0c;他与Proxmox VE类似&#xff0c;都是一个服务器虚拟化平台。它不像VMware ESXi那么复杂&#xff0c;对于个人使用者和中小企业是一个比较好的选择。 这个软件所在的网址为&#xff1a;…

【Python】已解决TypeError: init() got an unexpected keyword argument ‘threshold’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决TypeError: init() got an unexpected keyword argument ‘threshold’ 一、分析问题背景 在Python编程中&#xff0c;遇到“TypeError: init() got an unexpected keyword …

Three.js机器人与星系动态场景(二):强化三维空间认识

在上篇博客中介绍了如何快速利用react搭建three.js平台&#xff0c;并实现3D模型的可视化。本文将在上一篇的基础上强化坐标系的概念。引入AxesHelper辅助工具及文本绘制工具&#xff0c;带你快速理解camer、坐标系、position、可视区域。 Three.js机器人与星系动态场景&#x…

Qt学习:Qt Creator工程管理

Qt Creator工程通常包含了多个类型的文件&#xff0c;这些文件共同构成了项目的结构和功能。主要的文件类型包括&#xff1a; .pro 文件&#xff08;Project file&#xff09;&#xff1a;这是Qt Creator项目文件&#xff0c;也叫项目描述文件&#xff0c;用于定义工程的基本配…