【Python】Python单元测试

文章目录

    • 01-单元测试基础
      • 什么是单元测试
      • 常用的文件结构
      • 运行单元测试
    • 02. 断言函数
    • 03. Test Fixtures
      • 什么是Test Fixtures
      • 模块级别的Fixtures
      • 类级别的Fixtures
      • 方法级别的Fixtures
    • 04.Mock

01-单元测试基础

  1. 什么是单元测试
  2. 常用的文件结构
  3. 编写第一个单元测试
  4. 运行单元测试

什么是单元测试

单元测试是指一个自动化的测试:

  1. 用来验证一小段代码(单元)的正确性,例如只测试某个函数写的是否正确
  2. 可以快速执行
  3. 在独立的环境中执行

常用的文件结构

在这里插入图片描述

  1. myprj是项目代码目录 tests是单元测试代码目录,一般来说测试代码与项目代码文件目录结构一样
  2. tests/basictest_calculator.py必须以test_开头,因为测试的工具会寻找所有以test开头的文件,把他们当作单元测试文件运行,这算是一个规范

运行单元测试

myprj.basic中calculator.py代码:

class Calculator:def add(self, *args):res = 0for n in args:res += nreturn res

tests.basic中test_calculator.py代码:

import unittest
from myprj.basic.calculator import Calculator
"""文件要用"test_"开头测试类名要用"Test"开头
"""
class TestCalculator(unittest.TestCase):def test_add(self):"""测试类方法必须用"test_"开头通常分为三部分:setupactionassert"""# setupcal = Calculator()excepted_result = 10  # 期望输出为10# actionactual_result = cal.add(2,3,5)# assert 判断执行结果与期望结果是否相等,如果不相等,则测试失败# 说明代码有问题self.assertEqual(excepted_result, actual_result)

为了方便的运行测试:

pip install nose
pip install coverage# 运行一个测试文件
python -m unittest -v tests.basic.test_calculator
# 运行所有测试文件
nosetests --with-doctest -v tests/basic/
# 统计测试覆盖率
nosetests --with-coverage --cover-erase -v tests/

也可以使用pytest:

pytest --doctest-modules tests/

02. 断言函数

常用断言函数:
在这里插入图片描述

03. Test Fixtures

  1. 什么是Test Fixtures
  2. 模块级别的Fixtures
  3. 类级别的Fixtures
  4. 方法级别的Fixtures

什么是Test Fixtures

在测试之前或者之后执行的函数或者方法被称之为Test Fixtures
比如:在测试前需要先连接数据库,在测试后需要断开与数据建库的连接

模块级别的Fixtures

setUpModule() 在整个模块执行之前需要执行的函数
tearDownModule() 在整个模块执行结束之后需要执行的函数

import unittest
from myprj.fixtures.bank_account import BankAccountdef setUpModule():print("calling setUpModule")def tearDownModule():print("calling tearDownModule")class TestBankAccount(unittest.TestCase):def test_deposit_success(self):bank_account = BankAccount(0)bank_account.deposit(10)self.assertEqual(10, bank_account.balance)def test_withdraw_success(self):bank_account = BankAccount(10)bank_account.withdraw(10)self.assertEqual(0, bank_account.balance)

上述代码中,当单独执行test_deposit_successtest_withdraw_success时候,代码会自动执行setUpModuletearDownModule.
当执行TestBankAccount进行测试时,虽然有两个测试用例,但是setUpModuletearDownModule只会执行一次

类级别的Fixtures

setUpClass() 在整类执行之前需要执行的函数
tearDownClass() 在整个类执行结束之后需要执行的函数

import unittest
from myprj.fixtures.bank_account import BankAccountdef setUpModule():print("calling setUpModule")def tearDownModule():print("calling tearDownModule")class TestBankAccount(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print("calling setUpClass")@classmethoddef tearDownClass(cls) -> None:print("calling tearDownClass")def test_deposit_success(self):bank_account = BankAccount(0)bank_account.deposit(10)self.assertEqual(10, bank_account.balance)def test_withdraw_success(self):bank_account = BankAccount(10)bank_account.withdraw(10)self.assertEqual(0, bank_account.balance)

方法级别的Fixtures

setUp() 在任何一个方法执行之前都会被执行
tearDown()

import unittest
from myprj.fixtures.bank_account import BankAccountclass TestBankAccount(unittest.TestCase):def setUp(self) -> None:'''每一个类方法都要新建一个对象在任何一个方法执行之前都会执行'''print("calling setUp")self.bank_account = BankAccount(10)def tearDown(self) -> None:print("calling tearDown")self.bank_account = Nonedef test_deposit_success(self):self.bank_account.deposit(10)self.assertEqual(20, self.bank_account.balance)def test_withdraw_success(self):self.bank_account.withdraw(10)self.assertEqual(0, self.bank_account.balance)

04.Mock

  1. 什么是Mock
  2. Mock和MagicMock
  3. Mock实例

本文参考:
https://www.bilibili.com/video/BV1SP4y1D7Wd/?spm_id_from=333.999.0.0

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

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

相关文章

springsecurity的学习(四):实现授权

简介 springsecurity的授权,自定义授权失败的处理,跨域的处理和自定义权限校验方法的介绍 授权 权限系统作用 在后台进行用户权限的判断,判断当前用户是否有相应的权限,必须具有所需的权限才能进行相应的操作,以此…

【运维】JetBrains Gateway (Pycharm) SSH免密连接,改为免密连接

一直要求输入密码,很烦人: 如何免密连接? 1 重新打开gateway,来到这个界面点新建连接: 2 点这里设置: 3 在这一页,你可以改你的所有配置,只要设置为password并且保存密码&…

MySQL第6讲--DQL(数据查询语言)的基本操作之基本和条件查询

文章目录 前言DQL(数据查询语言)基本操作查询操作基本查询示例1:查询表格的name,age,并返回;示例2:查询表格中的所有字段;示例3:查询所有员工的工号并返回,起别名;示例4&…

基于Python的去哪儿网数据采集与分析可视化大屏设计与实现

摘要 本文旨在介绍如何利用Python进行去哪儿网景点数据的采集与分析。通过采集去哪儿网上的景点数据,我们可以获取大量的旅游相关信息,并基于这些数据进行深入分析和洞察,为旅游行业、市场营销策略以及用户个性化推荐等提供支持。 本文将使用…

实现挂机会议

png py文件 import os import pyautogui import time from typing import Callable, Tuple from datetime import datetime import cv2 import schedule#通过图像模板匹配在屏幕上找到指定区域并操作 def imgAutoClick(tempFile: str, whatDo: Callable[[Tuple[int, int, int…

【机器学习】混淆矩阵(Confusion Matrix)

一、混淆矩阵 True Negative (TN): 真负类,样本的真实类别是负类,并且模型将其识别为负类,cm[0][0]。False Positive (FP): 假正类,样本的真实类别是负类,但是模型将其识别为正类,cm…

【C语言】常用函数汇总表

目录 1. C语言常用函数汇总表&#xff08;概念功能&#xff09;1.1 输入/输出函数&#xff08;<stdio.h>&#xff09;1.2 字符串操作函数&#xff08;<string.h>&#xff09;1.3 内存管理函数&#xff08;<stdlib.h>&#xff09;1.4 数学函数&#xff08;<…

【原创】java+springboot+mysql学业跟踪指导管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Unity物理模块 之 ​2D刚体

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 1.刚体是什么 在 Unity 中&#xff0c;刚体&#xff08;Rigidbody&#xff09; 是物理引擎中最基本的组件之一&#x…

根据字典值回显,有颜色的

背景 本项目以若依前端vue2版本为例&#xff0c;项目中有根据字典值回显文本的函数selectDictLabel&#xff0c;但是有时候我们需要带颜色的回显&#xff0c;大概这样的 用法 <template v-slotscope><dict-label :options"dangerLevelOptions" :value&qu…

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…

deepin V23前瞻丨deepin V23与飞腾腾锐D3000完成适配,持续丰富deepin操作系统硬件生态

查看原文 近日&#xff0c;自主核心芯片研发飞腾公司宣布与deepin V23完成适配&#xff0c;包含飞腾新一代桌面CPU飞腾腾锐D3000、FT-2000/64、桌面芯片飞腾腾锐D2000等多款产品&#xff0c;为用户带来更智能、安全、稳定的使用体验。 飞腾腾锐D3000集成8个飞腾自主研发的新一…

Golang多版本环境安装并存

1. 准备 请先安装最新版本的Go&#xff0c;详见 https://go.dev/doc/install go version2. 配置镜像加速 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct3. 安装Go指定版本 Golang官方提供dl工具来实现多版本的Go环境管理&#xff0c;详见项目&#…

小白零基础学数学建模应用系列(二):基于Python的共享单车系统建模与仿真分析

共享单车系统作为一种绿色环保的出行方式&#xff0c;已成为现代城市公共交通的重要组成部分。本文将使用Python编程语言&#xff0c;并结合modsim库&#xff0c;构建并仿真一个共享单车系统的模型&#xff0c;通过这一过程来展示如何进行系统的建模与分析。 文章目录 一、背景…

虚拟化—XenServer安装教程详细(附客户端连接)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

Unity 编写自己的aar库,接收Android广播(broadcastReceiver)并传递到Unity

编写本文是因为找了很多文章&#xff0c;都比较片段&#xff0c;不容易理解&#xff0c;对于Android新手来说理解起来不友好。我这里写了一个针对比较小白的文章&#xff0c;希望有所帮助。 Android端 首先还是先来写Android端&#xff0c;我们新建一个Android空项目&#xf…

重新定义AI绘画体验,Midjourney全面进阶指令指南

前言 在人工智能绘画的世界里,Midjourney无疑是一颗璀璨的明珠。今天,就让我们一同探索这个神奇工具的奥秘,开启一段全新的AI绘画之旅。 一、奇妙之门:Midjourney的本质 与众不同的是,Midjourney并非一个单纯的软件,而是栖身于Discord平台的一位"云端画师"。有别于本…

【微信小程序】网络数据请求

1. 小程序中网络数据请求的限制 2. 配置 request 合法域名 3. 发起 GET 请求 调用微信小程序提供的 wx.request() 方法&#xff0c;可以发起 GET 数据请求&#xff0c;示例代码如下&#xff1a; 4. 发起 POST 请求 调用微信小程序提供的 wx.request() 方法&#xff0c;可以…

(计算机网络)网络层

目录 一.网络层提供哪种服务 二.两种服务的比较 三.ip协议 四.ip地址 五.ip地址的分类 六.子网掩码 七.路由器介绍 一.网络层提供哪种服务 1.ip地址--唯一的标识互联网上的某一台主机 2. 虚电路&#xff1a;虚拟的电路 二.两种服务的比较 ip数据报&#xff0c;不需要建…

Visual Studio Code 安装与 C/C++ 语言运行总结

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Visual Studio Code&#xff08;简称 VS Code&#xff09;是由微软开发的一款轻量级、强大的代码编辑器&#xff0c;支持多种编程语言和开发框架。由于其丰富的插件生态系统和灵活的配置选项&#xff0c;VS…