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

python使用unittest进行单元测试

文章目录

  • 示例程序
  • 更多assert方法

通过一种规范的测试方法,可以帮助我们在修改程序后能够快速的检测一些bug,使用unittest库的方法如下:

示例程序

import unittestclass Demo01(unittest.TestCase):@classmethoddef setUpClass(self) -> None:print("执行测试用例 - 整体初始化 - setUpClass")def setUp(self) -> None:  # 测试用例方法执行前的操作print('开始执行测试用例 - setUp')def tearDown(self) -> None:  # 测试用例方法执行前的操作print('结束执行测试用例 - tearDown')@classmethoddef tearDownClass(cls) -> None:  # 测试用例方法执行后的操作print("执行测试用例 - 整体结束 - tearDownClass")def test_01(self):  # 测试用例print("测试用例1")self.assertEqual(1, 1)  # 测试断言def test_02(self):  # 测试用例print("测试用例2")self.assertEqual(2, 2)def test_03(self):  # 测试用例print("测试用例3")self.assertEqual(1, 2)if __name__ == '__main__':unittest.main()

执行结果如下:

执行测试用例 - 整体初始化 - setUpClass
开始执行测试用例 - setUp
测试用例1
结束执行测试用例 - tearDown
开始执行测试用例 - setUp
测试用例2
结束执行测试用例 - tearDown
开始执行测试用例 - setUp
测试用例3
结束执行测试用例 - tearDownRan 3 tests in 0.010sFAILED (failures=1)2 != 1Expected :1
Actual   :2.........执行测试用例 - 整体结束 - tearDownClass

在执行测试用例的过程中:

  1. 在执行全部用例前会执行setUpClass,全部用例执行完成后会执行tearDownClass
  2. 每个用例在执行前会执行setUp,用例执行后会执行tearDown
  3. 每个需要执行的用例前都有一个前缀test,根据包含前缀的函数名称(比如testxxxx),就会被认定为是测试用例的一部分

更多assert方法

断言方法检查条件
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(x)bool(x) is True
assertFalse(x)bool(x) is False
assertIs(a, b)a is b
assertIsNot(a, b)a is not b
assertIsNone(x)x is None
assertIsNotNone(x)x is not None
assertIn(a, b)a in b
assertNotIn(a, b)a not in b
assertlsInstance(a, b)isinstance(a, b)
assertNotIsInstance(a, b)not isinstance(a, b)

更多assert的方法请参考:https://docs.python.org/zh-cn/3/library/unittest.html#unittest.TestCase.assertEqual

相关文章:

  • 学习Android的第十七天
  • 【二叉搜索树】【前后指针】Leetcode 501. 二叉搜索树中的众数
  • UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh
  • uniapp的h5端保存文件
  • Java中的Collection
  • 扩频通信信号的产生与接收
  • MySQL 常用优化方式
  • 学习:吴恩达:什么是神经元?神经网络如何工作?
  • idea生成WebServices接口
  • HTML超链接去下划线
  • vue3 + vite 项目可以使用纯Js开发吗?
  • Image Fusion via Vision-Language Model【文献阅读】
  • React Switch用法及手写Switch实现
  • 初学者如何学习python
  • leetcode 热题 100_三数之和
  • 【技术性】Search知识
  • Angular Elements 及其运作原理
  • Angular2开发踩坑系列-生产环境编译
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • create-react-app项目添加less配置
  • extract-text-webpack-plugin用法
  • Git初体验
  • Laravel Mix运行时关于es2015报错解决方案
  • magento2项目上线注意事项
  • Service Worker
  • 复习Javascript专题(四):js中的深浅拷贝
  • 开源SQL-on-Hadoop系统一览
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用agvtool更改app version/build
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 云大使推广中的常见热门问题
  • Android开发者必备:推荐一款助力开发的开源APP
  • FaaS 的简单实践
  • ​2020 年大前端技术趋势解读
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #android不同版本废弃api,新api。
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (30)数组元素和与数字和的绝对差
  • (java)关于Thread的挂起和恢复
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Unity3DUnity3D在android下调试
  • (转)创业家杂志:UCWEB天使第一步
  • (转)拼包函数及网络封包的异常处理(含代码)
  • **CI中自动类加载的用法总结
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net Redis的秒杀Dome和异步执行
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ C++ ] STL---仿函数与priority_queue