当前位置: 首页 > news >正文

UnitTest框架的使用

在这里插入图片描述

文章目录

  • 一、UnitTest框架是什么?
  • 二、UnitTest核心要素
  • 三、TestCase
  • 四、TestSuite & TestRunner

一、UnitTest框架是什么?

UnitTest框架是python自带的一个单元测试框架,主要用它来做单元测试,它有以下特点:

  • 能够组织多个用例去执行
  • 提供丰富的断言方法
  • 能够生成测试报告

二、UnitTest核心要素

1.TestCase(最核心模块)
TestCase(测试用例),注意我们这个测试用例是unittest框架的组成部分,不是手工和自动化中我们所说的用例(Test Case)

主要作用:每个TestCase都是一个代码文件,在这里代码文件中来书写真正的用例代码

2.TestSuite
TestSuite(测试套件),用来管理组装多个TestCase的

3.TestRunner
TestRunner(测试执行,测试运行),用来执行TestSuite(测试套件)的

4.TestLoader
TestLoader(测试加载),功能是对TestSuite(测试套件)功能的补充,用来管理 组装多个TestCase的

5.Fixture
Fixture(测试夹具),书写在TestCase(测试用例)代码中,是一个代码结构,可以在每个方法前后都会执行的内容

三、TestCase

TestCase是一个代码文件,在代码文件中书写真正的用例代码,代码文件的名字必须按照标识符的规则来书写(可以将代码的作用在文件的开头使用注解说明)

使用步骤:

  1. 导包(unittest)
  2. 自定义测试类
  3. 在测试类中书写测试方法
  4. 执行用例
"""代码目的: 学习TestCase(测试用例)模块的书写方法
"""# 1. 导包
import unittest# 2. 自定义测试类,需要继承unittest模块中的TestCase类即可
class TestDemo(unittest.TestCase):# 3. 书写测试方法, 也就是真正的测试代码# 书写要求,测试方法必须以test_开头(本质是以test开头)def test_method1(self):print('TestCase1')def test_method2(self):print('TestCase2')
# 4. 执行测试用例

在执行测试用例方法时,我们有以下两种方式:

  1. 将光标放在类名的后边运行,会执行类中的所有测试方法
    在这里插入图片描述

在这里插入图片描述
2. 将光标放在方法名的后边运行,只执行当前的方法
在这里插入图片描述
在这里插入图片描述

常见问题
1.代码文件命名不规范

1.代码文件的名字以数字开头
2.代码文件名字中有空格
3.代码文件名字中有中文
4.其他的特殊符号
(数字,字母,下划线组成,不能以数字开头)

2.代码运行没有结果

右键运行没有unittests for的提示,出现的问题
解决方案:

  1. 重新建一个代码文件,将写好的代码复制进去
  2. 删除已有的运行方式
    在这里插入图片描述
    在这里插入图片描述
    这样默认就是用的unittest方式运行

3.没有找到用例
测试方法不是以test开头的,或者单词写错了

四、TestSuite & TestRunner

TestSuite(测试套件):管理 打包 组装TestCase(测试用例)文件的
TestRunner(测试执行):执行TestSuite(套件)
步骤:

  1. 导包(unittest)
  2. 实例化(创建对象)套件对象
  3. 使用套件化对象添加用例方法
    4.实例化运行对象
    使用运行对象执行套件对象

具体代码:
TestSuite(测试套件):是用来管理多个TestCase的,我们需要先创建多个TestCase文件
在这里插入图片描述

"""学习 TestSuite 和 TestRunner使用
"""# 1. 导包
import unittestfrom test.testcase_1 import TestDemo1
from test.testcase_2 import TestDemo2# 2. 实例化套件对象
suite = unittest.TestSuite()# 3. 使用套件对象添加用例方法# 方式一: 套件对象.addTest(测试类名('方法名')) 建议直接复制
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method1'))# 4. 实例化运行对象
runner = unittest.TextTestRunner()# 5. 使用运行对象去执行套件
runner.run(suite)

在这里插入图片描述
使用测试套件对象添加测试用例方法的第二种方法:

    # 方式二: 将一个测试类的所有方法进行添加# 套件对象.addTest(unitest.makeSuite(测试类名))# 缺点: makeSuite() 这个方法官方是不太建议用的
suite.addTest(unittest.makeSuite(TestDemo1))
suite.addTest(unittest.makeSuite(TestDemo2))

给出了下述的提示信息:DeprecationWarning: unittest.makeSuite() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.loadTestsFromTestCase() instead.
suite.addTest(unittest.makeSuite(TestDemo1))。但是可以正确输出结果的
在这里插入图片描述
我们在运行完后,上面的符号是有一定的含义的:
. 代表用例通过,F 代表用例不通过,E error 用例代码有问题

注意点:
1.unittest.TestSuite()和unittest.TextTestRunner()是方法,需要加括号的
在这里插入图片描述
在这里插入图片描述
2.运行时对象是.TextTestRunner()不是.TestRunner()
在这里插入图片描述

相关文章:

UnitTest框架的使用

文章目录 一、UnitTest框架是什么?二、UnitTest核心要素三、TestCase四、TestSuite & TestRunner 一、UnitTest框架是什么? UnitTest框架是python自带的一个单元测试框架,主要用它来做单元测试,它有以下特点: 能…...

软件开发项目文档系列之四如何成功撰写一份引人注目的投标文件

目录 前言1 分析招标文件1.1 投标的基础要求分析1.2 投标重点要求分析1.3 评分标准分析1.4 技术需求分析 2 撰写完整的投标文件2.1 明确文件用途2.2 提供评分指引2.3 内容完整重点突出2.4 重视图表和图示 3 认真检查和经验积累3.1 深入的准备3.2 反复检查3.3 咨询和确认3.4 积累…...

Django设置跨域

1, 安装 pip install django-cors-headers 2, 添加应用 INSTALLED_APPS (...corsheaders,... ) 3, 中间层设置 MIDDLEWARE [corsheaders.middleware.CorsMiddleware,... ] 4, 添加白名单 # CORS CORS_ORIGIN_WHITELIST (127.0.0.1:8080,localhost:8080,www.meiduo.si…...

基于Python3的Scapy构造DNS报文

一:DNS协议 DNS(Domain Name System)协议是计算机网络中的一种基础协议,它用于将域名(如www.baidu.com)转换为IP地址(如192.168.0.1),从而实现计算机之间的通信。 DNS 分…...

Jupyter Notebook修改默认浏览器方法

Jupyter Notebook修改默认浏览器方法 Create a Jupyter Notebook Config file jupyter notebook --generate-config打开配置文件.jupyter/jupyter_notebook_config.py找到c.NotebookApp.browser 改成只向自己喜欢的浏览器路径’,这里给出选择google浏览器方法&…...

云计算系统与传统计算系统的比较

随着技术的不断发展,云计算系统逐渐成为了企业和个人使用的主要计算方式之一。然而,很多人对云计算系统与传统计算系统之间的区别和相似之处还存在一些疑惑。本文将以云计算系统和传统计算系统为方向,探讨它们之间的异同点。 首先&#xff0…...

使用GoogleNet网络实现花朵分类

一.数据集准备 新建一个项目文件夹GoogleNet,并在里面建立data_set文件夹用来保存数据集,在data_set文件夹下创建新文件夹"flower_data",点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/exampl…...

STM32之Bootloader、USB、IAP/DFU下载

STM32 IAP应用开发——通过内置DFU实现USB升级(方式2) STM32 IAP应用开发——通过内置DFU实现USB升级(方式1) STM32程序下载4:通过STM32CubePro-USB下载 STM32程序下载3:通过STM32CubePro-UART下载 STM…...

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…...

Android JNI笔记

JNI、java native interface 。可以实现Java和C、C之间的调用。 在Android开发中是必须要掌握的内容。 在应用开发中&#xff0c;编写JNI代码的注册可分为动态注册和静态注册 动态注册&#xff1a; 声明好方法、注意这些签名 在JNI_OnLoad中进行注册。 static const JNINativ…...

Web开发中会话跟踪的隐藏表单字段(隐藏input)方法

隐藏表单字段是一种会话跟踪方法&#xff0c;通过在HTML表单中添加一个隐藏字段来存储会话标识符。 这样&#xff0c;每次用户提交表单时&#xff0c;会话标识符将与请求一起发送到服务器&#xff0c;以便服务器可以跟踪用户的会话状态。 以下是一个隐藏表单字段的示例&#…...

线性代数相关笔记

线性基 导入 线性基&#xff0c;顾名思义&#xff0c;就是一个包含数字最少的集合&#xff0c;使得原集合中的任何数都能用线性基中的元素表示。 集合中的元素满足一些性质&#xff1a; 原集合中的任意元素都可以用线性基中的若干元素的异或和表示线性基中任意数异或和不为…...

【SA8295P 源码分析 (四)】69 - Android 侧添加支持 busybox telnetd 服务

【SA8295P 源码分析】69 - Android 侧添加支持 busybox telnetd 服务 一、下载 busybox-1.36.1.tar.bz2 源码包二、编译 busybox 源码三、将编译后的 busybox 打包编入Android 镜像中系列文章汇总见:《【SA8295P 源码分析 (四)】网络模块 文章链接汇总 - 持续更新中》 本文链接…...

如何开发一个 Safari 插件

本文字数&#xff1a;2493字 预计阅读时间&#xff1a;15分钟 由于常用浏览器是Safari&#xff0c;而Safari浏览器的插件比不上Chrome&#xff0c;所以就有了自己开发常用的Safari插件的想法。 打算开发当前页面生成二维码的Extension&#xff0c;因为网络原因&#xff0c;AirD…...

n皇后问题,不用递归

注释如下&#xff1a; class Solution:def totalNQueens(self, n: int) -> int:if n < 1: # 如果 n 小于 1&#xff0c;直接返回 0return 0count 0 # 初始化解的个数为 0stack [(0, set(), set(), set())] # 初始化一个栈&#xff0c;元素为当前处理的行数、已经放…...

Verilog基础:$fopen和$fclose系统函数、任务的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 $fopen和$fclose是两个用于打开和关闭文件的系统函数、任务。最初&#xff0c;在Verilog-1995标准中&#xff0c;最多只能同时打开32个文件&#xff0c;其所使用的…...

python之字典的用法

python之字典的用法 Python中的字典是一种无序、可变、可迭代的数据类型&#xff0c;它由键值对组成&#xff0c;每个键都映射到一个值。字典在Python中被视为可变对象&#xff0c;这意味着我们可以随时更新、添加或删除字典中的键值对。 以下是一些关于Python字典的基本用法&a…...

Leetcode1971. 寻找图中是否存在路径

Every day a Leetcode 题目来源&#xff1a;1971. 寻找图中是否存在路径 解法1&#xff1a;并查集 并查集介绍&#xff1a;并查集详解 代码&#xff1a; /** lc appleetcode.cn id1971 langcpp** [1971] 寻找图中是否存在路径*/// lc codestart class UnionFind {vector&…...

程序可以创建多少个用户界面对象?

有人提到这样一个问题&#xff1a;”一个程序最多可以注册多少个窗口类?” 问题的答案不是一个具体的数字。因为大多数用户界面对象都来自一个共享的内存池&#xff0c;我们称之为”桌面堆内存”。尽管我们可以计算一个最大的理论值&#xff0c;但是在实际的场景中&#xff0…...

业绩不俗,毛利率下滑,股价接连下跌,片仔癀将向何处去?

撰稿|行星 来源|贝多财经 10月16日&#xff0c;中药龙头企业漳州片仔癀药业股份有限公司&#xff08;600436.SH&#xff0c;下称“片仔癀”&#xff09;发布截至9月30日的2023年前三季度业绩报告。发布财报后&#xff0c;片仔癀的股价多日下跌。 10月17日、18日、19日和20日…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...

Heygem50系显卡合成的视频声音杂音模糊解决方案

如果你在使用50系显卡有杂音的情况&#xff0c;可能还是官方适配问题&#xff0c;可以使用以下方案进行解决&#xff1a; 方案一&#xff1a;剪映替换音色&#xff08;简单适合普通玩家&#xff09; 使用剪映换音色即可&#xff0c;口型还是对上的&#xff0c;没有剪映vip的&…...

Springboot多数据源配置实践

Springboot多数据源配置实践 基本配置文件数据库配置Mapper包Model包Service包中业务代码Mapper XML文件在某些复杂的业务场景中,我们可能需要使用多个数据库来存储和管理不同类型的数据,而不是仅仅依赖于单一数据库。本技术文档将详细介绍如何在 Spring Boot 项目中进行多数…...

MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool

在当今数据驱动的时代&#xff0c;数据库作为数据存储与管理的核心&#xff0c;其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库&#xff0c;在众多应用场景中发挥着关键作用。在这篇博客中&#xff0c;我将围绕 MySQL 数据库的核心知识展开&#xff0c;涵盖事务及…...